为什么多个展开选项不可能?

pub*_*oid 1 if-statement optional swift

我一直在玩swift的可选项.我经常使用条件展开模式:

var myOptional: AnyObject?
if let unwrapped = myOptional {
// do stuff
}
Run Code Online (Sandbox Code Playgroud)

但是,有时候我有两个可选值,如果两个都是非零的话我只想使用它们.因此,我尝试使用以下语法:

var myOptional: AnyObject?
var myOtherOptional: AnyObject?
if let unwrapped = myOptional && let otherUnwrapped = myOtherOptional? {
// do stuff
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试将这两个部分放在括号等中,但似乎没有办法做到这一点.有没有理由说我不应该这样做?显然我可以在另一个语句中嵌入一个语句,但我更愿意将它全部放在一行上.

Mar*_*anu 6

Swift 1.2您开始可以打开多个选项和条件.

"if let"构造已经扩展为允许使用类似于泛型约束的语法在单个if(或while)语句中测试多个选项和保护条件:if a a = foo(),b = bar()其中a <b ,让c = baz(){}这允许你测试多个选项并包括插入的布尔条件,而不会引入不希望的嵌套(即,避免"厄运金字塔").


rin*_*aro 5

因为语言不支持它.

文件中:

if语句中任何条件的值必须具有符合BooleanType协议的类型.条件也可以可选的绑定声明,如Optional Binding中所述.

condition必须是"的表达BooleanType或"任选的绑定声明"".并且"可选绑定声明"不是"表达式",因此您无法加入&&.

相反,你可以这样做switch:

switch (myOptional, myOtherOptional) {
case let (.Some(unwrapped), .Some(otherUnwrapped)):
    // do stuff
    println("\(unwrapped), \(otherUnwrapped)")
default:
    break
}
Run Code Online (Sandbox Code Playgroud)