2016-06-01 6 views

答えて

7

switchステートメントは、pattern matching operator~=)を使用して、それが行うことができる比較を定義します。あなたのケースでは、それはthis versionを使用します:

@warn_unused_result 
public func ~=<T : Equatable>(a: T, b: T) -> Bool 

これは、同じコンクリートの型の2つのEquatableの引数を取ります。 switchステートメントでは、各ケースはaに渡され、オンに切り替えるステートメントはbに渡されます。返されるBoolは、ケースがトリガされるかどうかを定義します。この場合は、a == bの値が返されます。 isEqual介しEquatableに準拠NSObjectから

UITextField

継承。したがって、この演算子には2つのUITextFieldsを使用することが有効です。したがって、switchで完全に有効です。

基本的な実装では、isEqualはポインタの同等性をチェックするだけです。したがって、スイッチのステートメントは、実際には与えられたUITextFieldが指定されたケースとまったく同じインスタンスであることを単に確認しています。

また、これを行うこととして考えることができます:

ちょうど( NSObject継承したクラスの場合)これをやっている
if textField == stateField { 
    print("editing state") 
} else if textField == countryField { 
    print("editing country") 
} else { 
    // 'default' case 
} 

if textField.isEqual(stateField) { 
    print("editing state") 
} else if textField.isEqual(countryField) { 
    print("editing country") 
} else { 
    // 'default' case 
} 

ここswitchを使用すると、偉大な使用方法であります - if & else ifステートメントをまとめてチェーン化するよりも、コードをはるかに明確にすることができます。

+0

ありがとうございます。私もそう思っていました。私はそれが正当なものかどうかは確かではありませんでした。 – Ezio

+1

これは、実際には、Cのバージョンとは対照的に、Swift switch文のパワーの本当に素晴らしい例です。 –

関連する問題