この動作の説明は何ですか?スイフトオペレータとnil
let x: Int? = nil
if x < 10 {
print("x < 10")
}
"x < 10"と表示されます。これはランタイムエラーまたは少なくともコンパイラの警告を生成すべきではありませんか?
EDIT:
私はアップルにバグレポートを提出し、彼らは別のレポートの既存の重複としてそれを認めました。だから、これは何らかの方法でAppleによって処理/修正されます。
この動作の説明は何ですか?スイフトオペレータとnil
let x: Int? = nil
if x < 10 {
print("x < 10")
}
"x < 10"と表示されます。これはランタイムエラーまたは少なくともコンパイラの警告を生成すべきではありませんか?
EDIT:
私はアップルにバグレポートを提出し、彼らは別のレポートの既存の重複としてそれを認めました。だから、これは何らかの方法でAppleによって処理/修正されます。
2つのことは、(我々はそれを好きかどうか)ここに起こる:まず、基になる型が同等であれば2つのoptionalsを比較 オペレータ
public func <<T : Comparable>(lhs: T?, rhs: T?) -> Bool
があります。 振る舞いは(私の知る限り)文書化されていないが、 nil
別名Optional<T>.None
が 値Optional<T>.Some(value)
すべての非ゼロ未満と考えているようです。
第二に、enum Optional
はコンストラクタ
if x < 10 { ... }
LHSで今
/// Construct a non-`nil` instance that stores `some`.
public init(_ some: Wrapped)
タイプOptional<Int>
を持っています。 <
演算子の唯一の候補は、上記の2つのオプションを比較したものです。 したがってRHSもオプションとして推測されるので、この は
if x < Optional<Int>.Some(10) { ... }
Updateに等しい:
この機能はスイフト3で削除された(SE-0121 – Remove Optional Comparison Operators)およびそのコードXcode 8 (現在ベータ6)でコンパイルされなくなりました。
'オプション'は 'let'で宣言することが許されているべきだから、面白いです。 –
私にはバグのようですが、' nilと直接比較しても動作します<-100' –
このような基本レベルのバグを信じるのは難しいです。 – Darko