このポストを見てちょっと確かめてみました。
Swiftのnil
は「値がない」という定義だと理解していたのだけど,厳密には違うようです。
nil < 0 // true
nil < -9_223_372_036_854_775_808 // true
ふーむ。Int.min
よりも小さいらしい。つまり「値がある」。
nil < 0.0 // true
nil < -(Double.infinity) // true
なんと-∞
よりも小さいという。
何か釈然しないものがあります。バグなのでしょうか?
Optional Chainingを使った時に問題が出そうです。
if some?.value < 0.0 { ... }
意図としては「value
が負の数ならば」ですが,some
がnil
ならボディが実行されてしまいます。
(本当はif let
を使うのが望ましい。)
ちなみにBool
型では,
nil == true // false
nil == false // false
となり,「値がない」ので真にも偽にもならないという直感通りの挙動を示します。
<追記> 実行環境: Xcode 6.0.1 及び Xcode 6.1 Beta on Yosemite PB3