2016-05-10 4 views
0

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 
     } 

    } 

} 

実行時に、ログインプロセスをキャンセルすると、エラーは返されず、上記のエラーはnilになりません。エラー値がnilの場合、返されるエラーパラメータの強制アンラップは確実にクラッシュするでしょうか?なぜこれがクラッシュしないのですか?それはちょうどそのように動作し、なぜ私は知らない

答えて

5

そのコードではありません時点で、あなたはerrorをアンラップしています。暗黙のうちでさえない。

CustomStringConvertibleに準拠しているため、printの機能は使用する必要がありません。代わりに、"nil"という文字列を返すdescriptionImplicitlyUnwrappedOptional実装をprint関数が呼び出します。

ImplicitlyUnwrappedOptionalnilを比較すると、Swiftはそれをアンラッピングしません。それは普通のものとして扱われますOptional

あなたはまだそれが値が含まれているかどうかを確認するために、通常のオプションのようなオプションの暗黙的に開封さを扱うことができます:The Swift Programming Language (Swift 2.2)から)分からない場合は、答え何のため

+0

あなたがしています右! 'ImplicitlyUnwrappedOptional'も 'Optional'です。そうでなければ、コンパイラは' if error == nil ... 'を警告します。 – Lumialxk

0

let withoutCrash: String! = nil 
withoutCrash 


let withCrash: String? = nil 
withCrash! 
+0

)を – sage444

関連する問題