Swift内联条件?
我如何在Swift中执行此操作?
(someboolexpression ? "Return value 1" : "Return value 2")
(不,我还没有读完整本手册…我可能在第2页上错过了!)
好,所以它在第91页和上面看起来是正确的。 不过,我试图用这样的string:
println(" some string \(some expression ? "Return value 1" : "Return value 2")"
但编译器不开心。 任何想法如果这可能吗?
这和我所能得到的一样接近
let exists = "exists" let doesnotexist= "does not exist" println(" something \(fileExists ? exists : doesnotexist)")
如果你正在寻找一个单线程来做到这一点,你可以将?:
操作从string插值中提取出来,并用+
连接起来:
let fileExists = false // for example println("something " + (fileExists ? "exists" : "does not exist"))
输出:
一些东西不存在
var firstBool = true var secondBool: Bool firstBool == true ? (secondBool = true) : (secondBool = false)
如果在这种情况下,它会将secondBool更改为firstBool。 你可以用整数和string来做到这一点
你可以使用新的Nil-Coalescing运算符 ,因为Swift 3在你需要设置默认值的情况下, if
失败:
let someValue = someOptional ?? ""
如果someOptional
为false,则该运算符将""
赋值给someValue
你真是太亲密了 只需要将其分配给一个variables:
self.automaticOption = (automaticOptionOfCar ? "Automatic" : "Manual")
编辑:
任何想法为什么相同的expression式不能embedded到一个string?
你可以这样做:
let a = true let b = 1 let c = 2 println("\(a ? 1: 2)")
好,
如果使用+运算符连接条件和string,它应该工作。
所以Mike是正确的。
var str = "Something = " + (1 == 1 ? "Yes" : "No")
它被称为“ 三元操作符 ”。
关于@ Esqarrouth的回答,我认为更好的格式是:
Swift 3:
var firstBool = true var secondBool: Bool secondBool = firstBool ? true : false
这是一样的:
var firstBool = true var secondBool: Bool if (firstBool == true) { secondBool = true } else { secondBool = false }
我在项目中使用的简单解决scheme
Swift 3+
var retunString = (state == "OFF") ? "securityOn" : "securityOff"