Swiftの`nil`は`-∞`よりも小さい ??

  • 7
    Like
  • 0
    Comment
More than 1 year has passed since last update.

このポストを見てちょっと確かめてみました。
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が負の数ならば」ですが,somenilならボディが実行されてしまいます。
(本当はif letを使うのが望ましい。)

 
ちなみにBool型では,

nil == true     // false
nil == false    // false

となり,「値がない」ので真にも偽にもならないという直感通りの挙動を示します。

<追記> 実行環境: Xcode 6.0.1 及び Xcode 6.1 Beta on Yosemite PB3