繁体   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