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
ステートメントをまとめてチェーン化するよりも、コードをはるかに明確にすることができます。
ありがとうございます。私もそう思っていました。私はそれが正当なものかどうかは確かではありませんでした。 – Ezio
これは、実際には、Cのバージョンとは対照的に、Swift switch文のパワーの本当に素晴らしい例です。 –