2016-08-31 6 views
38

に変換した後、ビューコントローラに表示され、新しい機能が私のViewControllerクラスの前に現れ:奇妙な一般的な機能は、迅速な3に変換した後、私のプロジェクトでは、迅速な3

fileprivate func < <T : Comparable>(lhs: T?, rhs: T?) -> Bool { 
    switch (lhs, rhs) { 
    case let (l?, r?): 
    return l < r 
    case (nil, _?): 
    return true 
    default: 
    return false 
    } 
} 

この機能は何をしますか?なぜ私はそれが必要なのですか?

答えて

44

これは興味深いことです。最新のスウィフト3には、事前に すべての非オプションの値よりも小さいと考えられた例

let a: Int? = nil 
let b: Int? = 4 

print(a < b) // true 

nilため、オプション値を比較できます。

この機能は削除されました(SE-0121 – Remove Optional Comparison Operators)と上記のコードは

どうやら
 
error: value of optional type 'Int?' not unwrapped; did you mean to use '!' or '?'? 

とXcodeの8ベータ6で のコンパイルに失敗し、スウィフト移行では、カスタムを提供 ことにより、あなたのためにその問題を解決し<演算子は2つのオプションのオペランド を取り、したがって古い動作を "復元"します。

この定義を削除すると、コード内で の比較が行われた場所がわかります。次にコード を更新し、オプションの比較を削除してください。

+0

基本的には、ほとんどの場合、単純に削除できますか?私はnilをオプションと比較する必要はありません。 –

+11

@BrightFuture:私の経験上、Xcodeはそれがどこかに必要な場合にのみ追加します。それを取り除き、何が起こるかを見てください。 –

関連する問題