给定一个非可选值,我如何匹配 switch 语句中的可选值?
例如:
let test = "some string"
let x: String? = nil
let y: String? = "some string"
let z: String? = "another string"
switch test {
case x:
print(x)
case y:
print(y)
case z:
print(z)
default: break
}
结果:
Expression pattern of type 'String?' cannot match values of type 'String'
对于每个案例
...
我已经阅读了关于 patterns 的 swift 文档和 switch但我似乎无法找到一种方法来完成这项工作。
我知道我可以解决这个问题,但必须有一种方法让这个工作...
编辑
根据要求,这是我的实际用例。请注意,所有文本字段都是可选的...
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
// TODO: Replace with switch if possible
// switch textField {
// case nameTextField:
// usernameTextField?.becomeFirstResponder()
// case usernameTextField:
// dateOfBirthTextField?.becomeFirstResponder()
// case dateOfBirthTextField:
// phoneTextField?.becomeFirstResponder()
// case phoneTextField:
// phoneTextField?.resignFirstResponder()
// default: break
// }
if textField == nameTextField {
usernameTextField?.becomeFirstResponder()
} else if textField == usernameTextField {
dateOfBirthTextField?.becomeFirstResponder()
} else if textField == dateOfBirthTextField {
phoneTextField?.becomeFirstResponder()
} else if textField == phoneTextField {
phoneTextField?.resignFirstResponder()
}
return false
}
最佳答案
swift 4.0
您可以使用 optional
case
进行检查,如下所示。
希望这对您有所帮助。
let test = "some string"
let x: String? = nil
let y: String? = "some string"
let z: String? = "another string"
switch test {
case let val where val == x:
print(x)
case let val where val == y:
print(y)
case let val where val == z:
print(z)
default:
break
}
关于swift - 在 switch 语句中匹配可选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46986097/