Обработчик завершения и оператор if в пределах - PullRequest
0 голосов
/ 24 декабря 2018

Я написал функцию, которая, по-моему, должна возвращать логическое значение, я использую обработчик завершения и переключатель, и если в этом выражении есть мой код:

   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 голосов
/ 24 декабря 2018
  • Прежде всего, не используйте NSArray и NSDictionary в Swift, используйте нативные типы.
  • Во-вторых, никогда используйте .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)                  
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...