在swift中使用switch语句的布尔函数[重复]

Posted

技术标签:

【中文标题】在swift中使用switch语句的布尔函数[重复]【英文标题】:Boolean function using switch statement in swift [duplicate] 【发布时间】:2018-12-23 12:51:03 【问题描述】:

我正在尝试使用 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
        
    

【问题讨论】:

【参考方案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)
    ...

【讨论】:

这是我第一次使用完成处理程序所以我不明白如何使用它我想调用我的函数登录所以如果结果为真我可以传递到下一个视图控制器 @LouayBaccary 关闭而不是我的点传递类似if success and here you can present next ViewController 我试过这段代码,但没有用 API.login(username: textUsername.text!, password: textPassword.text!) success in print("Welcome") @LouayBaccary 和你在 switch 中调用 completion(true)completion(false) 吗? 这是代码切换 response.result case .failure: //print(error) completion(false) case .success: //print (value) completion(true) 【参考方案2】:
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).responseJSONresponse 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)")
)

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

【讨论】:

【参考方案3】:

您需要使用完成处理程序:

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

【讨论】:

以上是关于在swift中使用switch语句的布尔函数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 3 中使用 switch 语句构造正则表达式

golang函数 和 条件语句

R中带有重复命令的Switch语句

全局布尔值在 addListenerForSingleEventValue 函数内设置,但在以下 if 语句中无法识别 [重复]

在 Swift UI 的布尔语句中使用状态变量

使用Servlet上的switch语句运行取决于JSP链接的方法[重复]