swift - 在 switch 语句中匹配可选

标签 swift switch-statement option-type swift4

给定一个非可选值,我如何匹配 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/

相关文章:

ios - Alamofire post 请求返回 "<?xml version="1. 0"encoding="utf- 8"?>"

arrays - 用于 UISearchBar 的过滤数组

ios - 子类 uitableview 单元格以快速更改分隔符高度

c++ - "default"switch case 是否会影响跳转表优化?

java - 可选的 <Integer> 不能转换为 Int(用于 GUI 进度条)

java - 如何使用Optional检查java中集合中模型的所有属性不为空?

ios - UIKeyboardWillShow 通知在物理设备上调用了两次,但在模拟器中没有调用

c++ - esp8266网络开关问题

c# - 使用带有版本开关的 Get/Set 来定义属性的最有效方法是什么?

ios - 展开可选的 JSON 元素使应用程序崩溃