
[英]Why does CGAffineTransformMakeRotation not work in Swift?
[英]Swift: Why does switching over textfields work?
例如:
func textFieldDidBeginEditing(textField: UITextField) {
switch textField {
case stateField:
print("editing state")
case countryField:
print("editing country")
default:
break
}
}
是因為它在查看這些字段的地址嗎? 這是使用switch語句的正確方法嗎?
在引擎蓋下, switch
語句使用模式匹配運算符 ( ~=
)來定義它可以執行的比較。 在您的情況下,它使用此版本 :
@warn_unused_result
public func ~=<T : Equatable>(a: T, b: T) -> Bool
這需要兩個相同具體類型的Equatable
參數。 在switch語句中,每個case都被傳遞給a
,並且要打開的語句被傳遞給b
。 它返回的Bool
定義是否應該觸發案例,在這種情況下它將返回a == b
的值。
UITextField
繼承自NSObject
,它通過isEqual
符合Equatable
。 因此,為此運算符使用兩個UITextFields
是有效的,因此在switch
使用它們是完全有效的。
作為其基本實現, isEqual
只檢查指針相等性。 因此,您的switch語句確實只是檢查您的給定UITextField
是否與給定案例完全相同。
您也可以考慮這樣做:
if textField == stateField {
print("editing state")
} else if textField == countryField {
print("editing country")
} else {
// 'default' case
}
這只是這樣做(在NSObject
繼承的類的情況下):
if textField.isEqual(stateField) {
print("editing state")
} else if textField.isEqual(countryField) {
print("editing country")
} else {
// 'default' case
}
在這里使用switch
是很有用的 - 它使你的代碼比將大量的if
和else if
語句鏈接在一起更清晰。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.