我正在尝试使用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
}
}
答案 0 :(得分:1)
您应使用带有Bool
参数的完成处理程序,而不要返回值
class func login(username : String , password : String, _ completion: @escaping (Bool) -> ())
现在您可以像这样调用完成(也可以通过声明error
和value
来解决情况)
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)
}
}