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,那么返回的错误参数的强制解包肯定会导致崩溃,不是吗?为什么这不会导致崩溃?
在这个代码中你决不打算解开error.甚至没有暗示.
由于ImplicitlyUnwrappedOptional符合CustomStringConvertible,该print功能不需要打开它.相反,打印功能调用ImplicitlyUnwrappedOptional的执行description(返回字符串"nil").
当你比较ImplicitlyUnwrappedOptional时nil,Swift没有打开它.它将其视为常规Optional.来自Swift编程语言(Swift 2.2):
您仍然可以将隐式解包的可选项视为普通可选项,以检查它是否包含值:
| 归档时间: |
|
| 查看次数: |
893 次 |
| 最近记录: |