我们知道,我们可以使用if let语句作为简写,判断可选的nil,然后展开.

但是,我想用逻辑AND运算符&&将其与另一个表达式结合起来.

例如,我在这里进行可选的链接以展开,并可选地将我的rootViewController向下转换到tabBarController.但我不想嵌套if语句,而是想将它们组合起来.

if let tabBarController = window!.rootViewController as? UITabBarController {
    if tabBarController.viewControllers.count > 0 {
        println("do stuff")
     }
 }

联合捐赠:

if let tabBarController = window!.rootViewController as? UITabBarController &&
    tabBarController.viewControllers.count > 0 {
        println("do stuff")
     }
}

上面给出了编译错误Use of unresolved identifier 'tabBarController'

简化:

if let tabBarController = window!.rootViewController as? UITabBarController && true {
   println("do stuff")
}

这将导致编译错误Bound value in a conditional binding must be of Optional type.try 了各种语法变体后,每种变体都会给出不同的编译器错误.我还没有找到顺序和括号的最佳组合.

So, the question is, is it possible and if so what is correct syntax?

Note that I want to do this with an 100 statement 103 a 101 statement or a ternary 102 operator.

推荐答案

从Swift 1.2开始,这是is now possible.Swift 1.2 and Xcode 6.3 beta release notes个州:

More powerful optional unwrapping with if let-if let构造

使用上面的语句,语法将是:

if let tabBarController = window!.rootViewController as? UITabBarController where tabBarController.viewControllers.count > 0 {
        println("do stuff")
}

这使用了where条款.

另一个例子是,这一次从AnyObjectInt,展开可选项,并判断展开的可选项是否满足条件:

if let w = width as? Int where w < 500
{
    println("success!")
}

For those now using Swift 3, "where" has been replaced by a comma. The equivalent would therefore be:

if let w = width as? Int, w < 500
{
    println("success!")
}

Swift相关问答推荐

如何在 Swift 中返回 Task 中定义的变量

如何使用 Date.ParseStrategy 在 Swift 5.6 中将字符串解析为日期?

SwiftUI 文本被意外截断

在视图中设置所有变量

iPhone 不可用.请重新连接设备. / iOS 14.2 - Xcode 12.1

在 SwiftUI 中使用参数初始化 @StateObject

如何在 Swift 包管理器库中包含assets资源 /资源?

来自 ObservableObject 的绑定值

Swift 中的单元测试致命错误

如何在 SwiftUI 中的一个视图上显示两个alert ?

如何在 SwiftUI Segmented Picker 中更改选定的段 colored颜色

在回调中以编程方式推送视图,SwiftUI

SwiftUI:发送邮箱

SwiftUI:将多个 BindableObjects 放入环境

如何在 SwiftUI 的 ScrollView 中创建多行文本?

在这个例子中美元符号有什么作用?

Swift 5.0:不推荐使用“withUnsafeBytes”:使用 `withUnsafeBytes(...)

哪些版本的 Xcode 支持哪些版本的 Swift?

UIImageJPEGRepresentation 已被实例方法 UIImage.jpegData(compressionQuality:) 替换

在 Swift 中计算两个日期之间的差异