如果要同时分配一个字符串并在Swift中检查它是否为空。
if let alternative3Text = attributes.stringForKey("choiceThree") && alternative3Text != "" {
// do stuff with alternative3Text
}
这在Swift中是可行的,还是我必须做一个嵌套的if语句?
答案 0 :(得分:8)
更新:自Swift 3(Xcode 8)起,附加条款为
由逗号分隔,而不是where
:
if let alternative3Text = attributes.string(forKey: "choiceThree"),
alternative3Text != "" {
// do stuff with alternative3Text
}
更新:从Swift 1.2(Xcode 6.3 beta)开始,可以组合 附加条件的可选绑定:
if let alternative3Text = attributes.stringForKey("choiceThree") where alternative3Text != "" {
// do stuff with alternative3Text
}
使用switch-case仍然有效但不再需要用于此目的。
旧答案:
使用if
语句无法使用switch
。
switch case可以使用where
子句来检查其他条件
(documentation)。
假设(根据您的问题)attributes.stringForKey("choiceThree")
返回
String?
,以下内容可行:
switch (attributes.stringForKey("choiceThree")) {
case .Some(let alternative3Text) where alternative3Text != "":
// alternative3Text is the unwrapped String here
default:
break
}
答案 1 :(得分:0)
不,您不能要求在if语句中使用其他表达式。您需要添加其他代码,以您已经提到的嵌套if语句的形式或以其他方式执行此操作。如果您的唯一要求是保持此语句看起来干净并且不介意将其他逻辑移动到其他地方,那么您可以随时对属性变量进行扩展,以添加此功能。
以下是属性是NSUserDefaults实例的示例。 (只是因为它已经包含了一个stringForKey()实例方法。)
extension NSUserDefaults {
func nonEmptyStringForKey(key: String) -> String? {
let full = self.stringForKey(key)
return full != "" ? full : nil
}
}
然后像这样使用它
if let alternative3Text = attributes.nonEmptyStringForKey("choiceThree") {
// stuff
}