Swift:Force unwrap是零,但没有崩溃......?

0 syntax ios swift

Facebook SDK(4.x)有一个委托协议,强制解包返回的错误.

extension FacebookLoginViewController: FBSDKLoginButtonDelegate {

func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) {

        print("\(error)")

        if error == nil && result.isCancelled == false {
            //success
        }

    }

}
Run Code Online (Sandbox Code Playgroud)

在运行时,当我取消登录过程时,不会返回任何错误,并且上面的错误提示为零.如果错误值为nil,那么返回的错误参数的强制解包肯定会导致崩溃,不是吗?为什么这不会导致崩溃?

rob*_*off 5

在这个代码中你决不打算解开error.甚至没有暗示.

由于ImplicitlyUnwrappedOptional符合CustomStringConvertible,该print功能不需要打开它.相反,打印功能调用ImplicitlyUnwrappedOptional的执行description(返回字符串"nil").

当你比较ImplicitlyUnwrappedOptionalnil,Swift没有打开它.它将其视为常规Optional.来自Swift编程语言(Swift 2.2):

您仍然可以将隐式解包的可选项视为普通可选项,以检查它是否包含值: