2016-03-03 11 views
10

は、このステートメントfrom Apple documentを見たことがありますか?値9を割り当てているので、nilにすることはできません。オプションのタイプの目的は(私が理解するように)保持することができることですnil. はこのステートメントにnilを保持する必要はありません。誰かが説明できますか?なぜ値を持つ定数にオプションの型を使用しますか?</p> <pre><code>let optionalInt: Int? = 9 </code></pre> <p>は、なぜあなたは、この定数の型として<code>Int?</code>を使用します。

+1

あなたは、コードの行を見つけたAppleのdocのページをリンクしてください。これにより、より効率的に回答するためのコンテキストが得られます。 – RaphBlanchet

+1

@RaphBlanchet私はそれを見つけました。 [オプションを導入する際には1行の例として使用されます](https://developer.apple.com/library/ios/referencelibrary/GettingStarted/DevelopiOSAppsSwift/Lesson1.html#//apple_ref/doc/uid/TP40015214-CH3-SW1 )。 –

+0

ここには、https://developer.apple.com/library/ios/referencelibrary/GettingStarted/DevelopiOSAppsSwift/Lesson1へのリンクがあります。html#// apple_ref/doc/uid/TP40015214-CH3-SW1 「optionalInt」を検索します。これは1行の例ですが、例が意味をなさないと思います。 –

答えて

5

私はあなたがそれを使用する可能性があるケースを見つけました。それは少しのストレッチですが、ここに行きます。

let x: Int? = whateverを使用する理由の1つは、パラメータが異なるタイプのオーバーロードされた機能がある場合です。例:

func doSomething(x: Int) 
{ 
    print("\(x) is an Int") 
} 

func doSomething(x: Int?) 
{ 
    print("\(x) is an optional") 
} 

2番目のオーバーロードが確実に行われるようにするには、パラメータを明示的にオプションにする必要があります。

let y = 5 
doSomething(y) // prints 5 is an Int 

let z: Int? = 6 
doSomething(z) // prints Optional(6) is an optional 

私はまだ実生活でこれを見ていません。

アップルのマニュアルに関しては、単なる単純な例です。

+1

これはちょっとしたことですが、let x:Intを使用するより良い理由が見つかる前に、 =これはこれまでのところ最高の答えです。多分、それには正当な理由はないでしょう。アップルは悪い例を示しています。 –

1

カップルのアイデア:

あなたはおそらく、あなたは正確にメソッドの定義に合わせて定数を定義する方法

func foo(xValue: Int?)->Int? { 
    // some logic 
} 

を持っていると仮定すると。

let optionalInt: Int? = 9 
let fooVal = foo(optionalInt) 

または(あなたの最初のletステートメントを変更)、定数の値は、私はリンゴのドキュメントのこの特定の部分は、単に例示することを意図していると思うオプション

let optionalInt: Int? = foo(nil) 
+0

上記のfooの例では、int定数でfooを呼び出すことができますか? let nonOptionalInt:int = 9 let fooVal = foo(nonOptionalInt) このようにfooを呼び出すことができない場合、AgRizzoは値をオプションとして宣言する正当な理由を提供しています。誰かがコメントできますか? –

+0

私はちょうど実験をしました。関数foo(xValue:Int?)に対して、型Intの値をfooに渡すと、それは引き続き機能します。だから、AgRizzoは私の質問に正当な理由はない。 @AndrewF。 –

+0

- 私はあなたに2つの理由を提供しました。私の理由が気に入らないかもしれないが、私の理由が無効であることを証明していない。あなたはIntが暗黙的にOptional Intにキャストできることを証明しました。 – AgRizzo

3

を返す関数によって決定されますオプションの概念と他に何もない。おそらくletを使用して、常にletのプロパティ/変数を宣言して開始し、明示的に値を変更する必要がある場合はvarに切り替えてください。

なぜlet foo: Int? = 9を宣言すればよいのですか?let foo = 9だけではありません。まあ、どこが必要なのか分かりません。 APIがInt?を予期していても、Int型の変数をそのようなAPIに引き渡すことができ、Swiftは暗黙的にそれを変換します。おそらく、それを汎用関数に渡して、汎用のInt?バージョンを使用したい場合は、それをやりたがりますが、実用にはあまりにも学問的です。

+0

これは正解です。値が 'nil'にならないことを知っているときは、オプションを作成することは決してうまくありません。たとえ遠くに取り込まれた他の回答の例であっても、必要に応じて明示的にキャストした方が良いでしょう。 – Sulthan

関連する問題