2016-06-21 7 views
-4

ゼロ例えば迅速な例</p> <pre><code>NSString *test=nil; </code></pre><p>ためのObjective-Cで

var test: String? = nil 
+1

違いは何だと思いますか?あなたは何を問題にしていますか?これが本当にあなたの質問の範囲であれば、公式の文書を読んで – Wain

+2

「Swift with Cocoa and Objective-C」リファレンスを見ましたか?特に、「ナラティリティとオプション」の章では? –

答えて

0

スウィフトタイプのシステムはあなたにtestの選択性を扱わせるでしょう。最初にアンラッピングしないと使えませんでした。

testString?であり、nilであるため、test.lowercaseStringを呼び出すことができませんでした。あなたが最初にそれをアンラップする必要があると思います:Objective-Cで

if let test = test { 
    print(test.lowercaseString) 
} 
else { 
    //test was nil, handle error here 
} 

testはただの変数で、型システムは、それがnilであることについて何の手掛かりを持っていません。

NSLog([test lowercaseString]) //Boom goes the dynamite. 

the language guide section on thisをお読みください。

+3

Objective-Cで 'NULL'メソッドを呼び出すだけで何もしません。それはクラッシュしません。これはSwiftの 'test ?lowerCaseString'のように機能します。 – vacawama

+2

Objective-Cでは、例えば 'IBOutlets'の接続を忘れると何も起こりません。 Swiftでは、あなたは 'nil'を展開しようとするとクラッシュします。 Swiftの方法は、簡単に見つけ出してデバッグすることができます。 – vacawama

+0

@vacawamaあなたは正しいですが、依然として望ましくない動作です – Alexander

3

Swiftのすべてのものは、オブジェクト参照だけでなくオプションでもかまいません。 3つの可能な値nil、false、およびtrueを持つオプションのboolを持つことができます。オプションのダブルを使用できます。これはObjective-Cではまったく利用できないものです。

Swiftでは、オブジェクト参照にはオプションとオプションではないという2つの味があります。オプションはnilでもnilでもかまいません。非選択詞はこれまでどおりにすることはできません。 Objective-Cでは、任意のオブジェクト参照がnilになる可能性があります。

関連する問題