迅速使用switch语句的布尔函数

时间:2018-12-23 12:51:04

标签: swift switch-statement

我正在尝试使用switch语句获取布尔结果,但是我想我的代码中有问题:

    class func login(username : String , password : String) 
  -> Bool   {
        let url = "http://127.0.0.1:3000/login/"+username+"/"+password
        Alamofire.request(url).responseJSON{response in
        switch response.result
              {
        case .failure:
            //print(error)
            return false
        case .success:
            //print (value)
            return true
            }



    }

3 个答案:

答案 0 :(得分:1)

您应使用带有Bool参数的完成处理程序,而不要返回值

class func login(username : String , password : String, _ completion: @escaping (Bool) -> ())

现在您可以像这样调用完成(也可以通过声明errorvalue来解决情况)

switch response.result {
case .failure(let error):
    //print(error)
    completion(false)
case .success(let value):
    //print (value)
    completion(true)
}

然后,在调用完成时,您可以在其闭包内访问Bool参数。

Foo.login(username: "", password: "") { success in 
    // print(success)
    ...
}

答案 1 :(得分:0)

typealias CompletionClosure = (Bool) -> Void
class func login(username : String , password : String, completionHandler: @escaping CompletionClosure)   {
        let url = "http://127.0.0.1:3000/login/"+username+"/"+password
        Alamofire.request(url).responseJSON{response in
        switch response.result
              {
        case .failure:
            //print(error)
            completionHandler(false)
        case .success:
            //print (value)
            completionHandler(true)
            }
    }

用法

login(username: "username", password: "password", completionHandler: { result in
print("Your result is \(result)")
})

您必须使用完成处理程序,因为此代码以异步方式工作。简而言之,您可以“收取代码”以在以后执行。当工作完成时,将触发完成。您可以将这种代码恢复为通常的方式,但是必须使用互斥锁,并注意线程阻塞操作。

答案 2 :(得分:0)

您需要使用完成处理程序

   class func login(username : String , password : String, callBack: (bool)-> Void) {
            let url = "http://127.0.0.1:3000/login/"+username+"/"+password
            Alamofire.request(url).responseJSON{response in
                switch response.result
                {
                case .failure:
                    callBack(false)
                    //print(error)
                case .success:
                    //print (value)
                    callBack(true)

                }            
    }