在Swift中使用可选项解包错误

时间:2015-06-01 20:53:33

标签: ios swift

我正在尝试与API建立一些连接,如果用户名未知,我需要返回错误消息。虽然,当我尝试在我的帖子请求中打印我的变量时,我看到了该消息但是如果我在请求之后打印我的变量但是在我的函数中,我有一个错误:fatal error: unexpectedly found nil while unwrapping an Optional value (lldb)

以下是我的代码示例。我使用SwiftHTTP来满足我的要求:

var errSign: String?
func signUp(email:String, pwd:String) {
    let params: Dictionary<String,AnyObject> = ["password": pwd, "email": email]

    task.POST(signUpUrl, parameters: params, completionHandler: {(response: HTTPResponse) -> Void in
        if let err = response.error {
            println("error: \(err.localizedDescription)")
        }
        if let json = response.responseObject as? Dictionary<String, AnyObject> {
            var data = JSON(json)
            if data["error"] != false {
                self.errSign = String(stringInterpolationSegment: data["error"])
                println(self.errSign!)
            }
        }
    })
    // ERROR println(self.errSign!)
}

2 个答案:

答案 0 :(得分:0)

您已将errSign声明为可选项,因此在尝试打印任何内容之前,您应该检查一下是否存在某些内容:

self.errSign = String(stringInterpolationSegment: data["error"])
if let actualErrSign = self.errSign
{
    println(\(actualErrSign))
} else {
    println("no (obvious) error was returned")
}

答案 1 :(得分:0)

这个! keyword是解包可选变量以访问其值。仅当可选变量包含值时才可以执行此操作。如果您尝试解包一个实际上不包含值的可选变量,您的应用程序将崩溃并收到该致命错误。

解决方案在@Michael Dautermann的答案中。