2016-06-14 13 views
3

follwoingコードの例を考える:なぜオプション(nil)はありませんが、nilだけはありますか?

var ResponseCode: Int? = 404 
print(ResponseCode) // --> Optional(404) 
ResponseCode = nil 
print(ResponseCode) // --> nil (why not Optional(nil)?) 

質問:私がnil値のオプションを印刷したとき、それはちょうどnilである理由を。なぜまた表示しないでくださいOptional(nil)

あなたの時間と助けてくれてありがとう。

答えて

3

これは説明が簡単です。 Optionalは、.Some(T).Noneという2つの値を持つ列挙型です。

ご覧のとおり、いずれか1つのパラメータしかありません。

.Some(T)の文字列の説明は"Optional(description of T)"です。 .Noneにはパラメータがないため、説明はただnilです。

ログには"Optional(nil)"が表示されることがありますが、その場合はDouble Optionals(例:Int??)を扱っています。

print(Optional<Int?>(Optional<Int>.None)) // prints "Optional(nil)" 
+0

あなたの説明のために多くのおかげで、良いことを知っておいてください。オプションは実際に列挙型です – SLN

3

nilは、定数リテラルの意味でOption.Noneです。

オプションにnil値を格納することは意味をなさないが、Optionalsの目的を完全に無効にすることになります。

+0

あなたの説明と議論に感謝します。 – SLN

+2

それは本当に目的を破るものではありません、我々はダブルオプションも持っています。 – Sulthan

+0

@sulthanはい、私はそれを単一のコンテキストの中で意味しました。それは彼らの契約を破るだろう。 – Alexander

関連する問題