如果Let Error - 条件绑定的Initializer必须具有Optional类型,而不是'[NSObject:AnyObject]'

时间:2015-12-16 17:39:18

标签: swift

这是我的代码。

    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]'” 有谁知道解决方案?

2 个答案:

答案 0 :(得分:4)

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)

如果您确定,则该值将为String。

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

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

答案 1 :(得分:-2)

请将代码更新为:

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

然后它会起作用。