首页 > 解决方案 > 位置的额外参数

问题描述

我有一组用户名和密码,如第 18 行和第 19 行所示。在第 36 行,有没有一种方法可以包含整个密码数组(例如用户名 (0)、(1) 和 (2))而不是一遍又一遍地复制代码?

导入 UIKit

类视图控制器:UIViewController {

@IBOutlet weak var txtUserName: UITextField!
@IBOutlet weak var txtPassword: UITextField!
@IBOutlet weak var view1: UIView!
@IBOutlet weak var view2: UIView!

let usernames = ["usernames1","usernames2","usernames3"]
let passwords = ["password1","password2","password3"]

override func viewDidLoad() {
    super.viewDidLoad()
    
    view1.layer.cornerRadius = 12.5
    view2.layer.cornerRadius = 12.5

    // Do any additional setup after loading the view.
    if UserDefaults.standard.bool(forKey: "ISUSERLOGGEDIN") == true {
        let HomeVC = self.storyboard?.instantiateViewController(withIdentifier: "HomeVC") as! HomeVC
        self.navigationController?.pushViewController(HomeVC, animated: false)
    }
}


@IBAction func authenticateUser(_ sender: Any) {
    if txtUserName.text == usernames[0,1,2] && txtPassword.text == passwords[0,1,2] {
                    UserDefaults.standard.set(true, forKey: "ISUSERLOGGEDIN")
                    let HomeVC = self.storyboard?.instantiateViewController(withIdentifier: "HomeVC") as! HomeVC
                    self.navigationController?.pushViewController(HomeVC, animated: true)
        let alert = UIAlertController(title: "Correct!", message: "You are now logged in", preferredStyle: .alert)
            alert.addAction(UIAlertAction(title: "Dismiss", style: .cancel, handler: nil))
        }
    if (txtUserName.text!.count) < 6 || (txtPassword.text!.count) < 6 {
        
        let alert = UIAlertController(title: "Whoops",
                                      message: "Please enter all information to log in.",
                                      preferredStyle: .alert)
        alert.addAction(UIAlertAction(title:"Dismiss",
                                      style: .cancel, handler: nil))
        present(alert, animated: true)
    }
}

}

标签: arraysswiftxcodeswift5

解决方案


如果用户可以使用列表中的任何用户名和密码(例如第一个用户名和第三个密码)登录,您可以使用这样的用户代码

if usernames.contains(txtUserName.text ?? "") && passwords.contains(txtPassword.text ?? "") {

如果它应该是成对的(只有第一个用户名和第一个密码第二个用户名和第二个密码),最简单的代码将是

if let userNameIndex = usernames.firstIndex(of: txtUserName.text ?? ""),
   let passwordIndex = passwords.firstIndex(of: txtPassword.text ?? ""),
   userNameIndex == passwordIndex {
          UserDefaults.standard.set(true, forKey: "ISUSERLOGGEDIN")
          ...

推荐阅读