簡體   English   中英

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是很有用的 - 它使你的代碼比將大量的ifelse if語句鏈接在一起更清晰。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2025 STACKOOM.COM