
[英]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.