2016-07-26 14 views
2

Swiftの文字列を比較する場合、オプションの文字列とオプションの文字列を比較できます。スウィフトの比較文字列オプションと非オプションの文字

ので、同じように(テキストは任意であり、それが空である):等価演算子は、それ自体で文字列をアンラップので、それが

UITextField.text == "" // True 

ですか?

+3

は実際のコードですか? 'UITextField'クラスには' text'プロパティがありません – Wain

+0

これは単なる例です。私はUITextFieldを初期化しており、textという属性を持っています。 https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITextField_Class/ – WYS

+1

アンラッピングはありません。等価性はoptionalsにも定義されています。オプションは自動的にオプションに昇格することができます。 – Sulthan

答えて

2

あなたの理論は、次の例では成り立たない。

let x: String? = nil 

if x == "" { 
    print("True") 
} else { 
    print("False") //Printed 
} 

ここで実際に何が起こっていることはtextプロパティが実際に初期化時にnilことはありませんということです - documentationによって与えられたとして、それは、代わりに空の文字列です:

この文字列はデフォルトでは ""です。

Swiftコンパイラは暗黙的に任意のオプションをアンラップしません。その代わりに、その責任をプログラマに委ねます。

public func ==<T : Equatable>(lhs: T?, rhs: T?) -> Bool 

右側の非オプションが自動的に任意に昇格されます:==操作もoptionalsのために定義されているすべてのEquatableタイプについて

10

オプションの==は、両方の値がnilの場合、または両方が非nilで、等しい場合は、trueを返します。

+3

サイドノート:オプションの引数を取る対応する*比較演算子は、Swift 3:https://github.com/apple/swift-evolution/blob/master/proposals/0121-remove-optional-comparison-operatorsで削除されます。 md。 –