【问题标题】:If Let Error - Initializer for conditional binding must have Optional type, not '[NSObject : AnyObject]'If Let Error - 条件绑定的初始化程序必须具有 Optional 类型,而不是 '[NSObject : AnyObject]'
【发布时间】:2015-12-16 17:39:18
【问题描述】:

这是我的代码。

    PFUser.logInWithUsernameInBackground(email, password: password) { (user: PFUser!, error: NSError!) -> Void in
        if user != nil {
            PushNotication.parsePushUserAssign()
            ProgressHUD.showSuccess("Welcome back, \(user[PF_USER_FULLNAME])!")
            self.dismissViewControllerAnimated(true, completion: nil)
        } else {
            if let info = error.userInfo {
                ProgressHUD.showError(info["error"] as! String)
            }
        }
    }

这会导致错误,例如“条件绑定的初始化程序必须具有可选类型,而不是 '[NSObject : AnyObject]'” 有谁知道解决办法吗?

【问题讨论】:

    标签: swift


    【解决方案1】:

    error.userInfo 不是可选的,它是编译器提示的[NSObject : AnyObject] 类型。无需用if let 解包,它永远不会是nil

    你可以替换

    if let info = error.userInfo {
        ProgressHUD.showError(info["error"] as! String)
    }
    

    ProgressHUD.showError(error.userInfo["error"] as! String)
    

    如果您确定,则该值将是一个字符串。

    否则,字典值应该被安全地解包并向下转换为字符串。示例:

    if let errorString = error.userInfo["error"] as? String {
        ProgressHUD.showError(errorString)
    }
    

    【讨论】:

    • 我已经用示例和更多细节更新了我的答案(我的答案的第一个版本确实有点轻,对此感到抱歉)。
    【解决方案2】:

    请将代码更新为:

    ProgressHUD.showError(error.userInfo["error"] as! String)
    

    然后就可以了。

    【讨论】:

      猜你喜欢
      • 2021-04-26
      • 2016-01-27
      • 2015-09-11
      • 1970-01-01
      • 2015-10-19
      • 2016-09-15
      • 1970-01-01
      相关资源
      最近更新 更多