完成处理程序以及其中的if语句

时间:2018-12-24 11:03:43

标签: swift

我写了一个函数,我猜它应该返回一个布尔值,我正在使用完成处理程序和switch以及if语句 这是我的代码:

   class func login(username : String , password : String, _ completion: @escaping (Bool) -> ()) {
        let url = "http://127.0.0.1:3000/login/"+username+"/"+password
        Alamofire.request(url).responseJSON{response in
            switch response.result
            {
            case .failure:
                print(response)
                completion(false)
            case .success:
                    if let dict = response.value as? NSDictionary {
                          let dict = response.value as? NSDictionary
                        let user = dict!["users"] as? NSArray
                        if user!.count > 0 {
                            print(user!.count)
                                                completion(true)
                                                }
                                            else {
                                                 print(user!.count)
                                                completion(true)
                            }
                }
            }
        }
}

我想这样使用它:

@IBAction func LoginBtn(_ sender: Any) {
        API.login(username: textUsername.text!, password: textPassword.text!) {
            success in
            if success{
                // if the function return true print(hello)
                //else print (type again)
            print("Welcome")
            }
            else{
                print("NO")
            }
        }

}

1 个答案:

答案 0 :(得分:0)

  • 首先在Swift中不要使用NSArrayNSDictionary,而要使用本机类型。
  • 所有第二个人从不使用.count > 0检查空数组或空字符串。有一个优化的属性isEmpty

您的代码非常繁琐,并且其中包含一些多余的部分。

如果true数组有效且不为空,则逻辑返回users,否则返回false

因此success分支可以简化为

case .success:                
  if let dict = response.value as? [String:Any], let users = dict!["users"] as? [[String:Any]], !users.isEmpty { 
      completion(true)
  } else { 
      completion(false)                  
  }