我们知道我们可以使用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")
}
}
上面给出了编译错误使用未解析的标识符“tabBarController”
简化:
if let tabBarController = window!.rootViewController as? UITabBarController && true {
println("do stuff")
}
这会产生编译错误条件绑定中的绑定值必须是Optional类型。尝试了各种语法变体后,每种变体都会给出不同的编译器错误。我还没有找到顺序和括号的最佳组合。
所以,问题是,是否可能,如果可能,正确的语法是什么?
请注意,我想用if
陈述not a switch
语句或三元组?
操作员。
从 Swift 1.2 开始,这现在是可能的. The Swift 1.2 和 Xcode 6.3 beta 发行说明 https://developer.apple.com/swift/blog/?id=22 state:
更强大的可选展开方式if let — if let 构造
现在可以一次打开多个选项,以及包含
介入布尔条件。这可以让你表达条件
控制流程,无需不必要的嵌套。
根据上面的语句,语法将是:
if let tabBarController = window!.rootViewController as? UITabBarController where tabBarController.viewControllers.count > 0 {
println("do stuff")
}
这使用了where
条款。
另一个例子,这次铸造AnyObject
to Int
,展开可选选项,并检查展开的可选选项是否满足条件:
if let w = width as? Int where w < 500
{
println("success!")
}
对于那些现在使用 Swift 3 的人来说,“where”已被逗号取代。因此,等价的是:
if let w = width as? Int, w < 500
{
println("success!")
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)