ios - 在 Swift 3 或 4 中检查 if 条件矩阵

标签 ios swift conditional-statements control-flow

假设我有一个需要检查的条件矩阵:

let one: String? = "one"
let two: String? = nil

func test() {
    if one == nil && two == nil {
        print("neither are valid")
    } else if one == nil {
        print("one is nil")
    } else if (two == nil) {
        print("two is nil")
    } else {
        print("\(one) and \(two) are valid")
    }
}

是否有 Swift 语言的功能可以让我写得更干净、更“像 Swift 一样”?相同的语法是否可以很好地扩展到一组三维条件?

我知道使用 guard,我可以在继续之前检查两个值是否有效,但是我需要根据一个、两个或两个都不为 nil 来执行某些操作,并且这显然会导致一些误报(守卫希望在继续之前两者都有效):

guard let one = one, let two = two else {
    return
}
if one == nil {
    print("one is nil")
} else if (two == nil) {
    print("two is nil")
} else {
    print("\(one) and \(two) are valid")
}

我确定我也可以使用 switch,但这似乎并不比没完没了的 if/else 更优雅:

switch (one != nil || two != nil) {
case one == nil && two == nil:
    print("neither are valid")
case one == nil:
    print("one is nil")
case two == nil:
    print("two is nil")
default:
    print("\(one) and \(two) are valid")
}

最佳答案

你可以像这样使用 Swift switch:

switch (one, two) {
case (nil, nil):
    print("neither are valid")
case (nil, _?):
    print("one is nil")
case (_?, nil):
    print("two is nil")
default:
    print("\(one) and \(two) are valid")
}

关于ios - 在 Swift 3 或 4 中检查 if 条件矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45990385/

相关文章:

ios - 如何在 applicationWillTerminate 上保存 NSUserDefaults

ios - 如何更新 Fabric 和 Crashlytics?

python - Python 中有两个条件的 if 语句

performance - 嵌套 `if` 是否会提高性能?

ios - 如何从具有图像的自定义栏按钮项目中删除右填充/边距/空间?

JavaScript:数字等级到字母等级

android - 如何在 iOS 中使用 WSSE 和 salted sha512 超过 1 次迭代

ios - React-Native,从相对路径加载图像时出错

ios - 在 applicationDidBecomeActive 时恢复 AVPlayer 视频?

ios - 为什么我不能将此字符串转换为 URL?