Swift part8 [無断転載禁止]©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0339デフォルトの名無しさん (ワッチョイ c7c9-7VFp)
2016/07/08(金) 13:02:17.95ID:goWM3aH00http://i.imgur.com/oD9dIpA.png
a、b、c全部別の意味を表すから、どれが正解かは場合による
10と.some(.some(10))で結果が同じなのは、10と書いてもコンパイラが.some(.some(.some(10)))に自動的にラップしてくれるから
なぜそんなことが許されるかというと、Int???型で「最終的に値が存在する状態」というのは.some(.some(.some(10)))以外にあり得ず、曖昧さが入り込む余地が無いから
だから10、.some(10)、.some(.some(10))、.some(.some(.some(10)))どう書いても全部結果は同じになる
本来なら.some(.some(.some(10)))って書かないといけないわけだけど、それ以外に解釈のしようがないんなら10って書けたほうが楽で便利だよねってこと
一方で、nilには外から何番目ののOptionalでnilなのかによって意味が異なってくるので、勝手にラップされるようなことはない
だからnilなのか.some(nil)なのか.some(.some(nil))なのかを、プログラマの責任できちんと意思表示しないといけない
// Swift 2.x
var a: Int???
a = 1
print(a) // Optional(Optional(Optional(1)))
a = .Some(1)
print(a) // Optional(Optional(Optional(1)))
a = .Some(.Some(1))
print(a) // Optional(Optional(Optional(1)))
a = .Some(.Some(.Some(1)))
print(a) // Optional(Optional(Optional(1)))
a = nil
print(a) // nil
a = .Some(nil)
print(a) // Optional(nil)
a = .Some(.Some(nil))
print(a) // Optional(Optional(nil))
■ このスレッドは過去ログ倉庫に格納されています