Swift内联条件?
Posted
技术标签:
【中文标题】Swift内联条件?【英文标题】:Swift inline conditional? 【发布时间】:2014-11-29 03:06:34 【问题描述】:如何在 Swift 中做到这一点?
(someboolexpression ? "Return value 1" : "Return value 2")
(不,我还没有阅读整本手册……我可能在第 2 页错过了它!)
好的,所以它在第 91 页,上面的内容似乎是正确的。但是我试图在这样的字符串中使用它:
println(" some string \(some expression ? "Return value 1" : "Return value 2")"
但是编译器不高兴。如果可能的话,知道吗?
这是我所能得到的最接近的地方
let exists = "exists"
let doesnotexist= "does not exist"
println(" something \(fileExists ? exists : doesnotexist)")
【问题讨论】:
这可能是语法上的疏忽,您可能想提交一个错误。我没有为此检查语法,但值得注意的是它不喜欢转义文字,只喜欢变量。 IE。你不能这样做:println("hello \("world")"),但你可以这样做:let world = "world"; println("hello \(world)"),正如你所说。总结一下,它似乎想要一个变量而不是一个表达式。 我会这样做的,干杯。与此同时,我将接受@MikeS 的回答作为目前的最佳选择 在let doesnotexist
之后需要一个空格,否则会发生预处理器错误,并确保您在println
语句之前的某个位置声明了let fileExists: Bool
,从Swift 2.0 开始,该语句实际上应该是print
.否则我试过你的代码它工作得很好
【参考方案1】:
如果您正在寻找一个单行器来执行此操作,您可以将 ?:
操作从字符串插值中提取出来,然后与 +
连接:
let fileExists = false // for example
println("something " + (fileExists ? "exists" : "does not exist"))
输出:
有些东西不存在
【讨论】:
为什么这不编译给我? ` 让答案 = (enterName_text == nil)? "" : enterName_text.text! ` @EladBenda 这最好不要作为评论,而是作为一个单独的问题,详细说明 enterName_text 是什么以及您遇到的错误。最好的猜测是你真的想要: if let answer = enterName_text?.text ... 当我第一次尝试这个三元运算符时,我认为它在 Swift 中不起作用。看这里,找到了这个答案。问题(来自 C/C++ 背景)没有在“?”之间放置空格。和第一个论点。这 '?'在 Swift 中对可选值进行了特殊处理,并且空格字符清楚地表明它实际上是一个三元运算符。【参考方案2】:您可以使用 Swift 3 中引入的新 Nil-Coalescing Operator。如果someOptional
是nil
,它将返回默认值。
let someValue = someOptional ?? ""
这里,如果someOptional
是nil
,则此运算符会将""
分配给someValue
。
【讨论】:
这是一个如此迅速的答案!正是我想要的。【参考方案3】:var firstBool = true
var secondBool: Bool
firstBool == true ? (secondBool = true) : (secondBool = false)
如果在这种情况下,它将 secondBool 更改为 firstBool 是什么。你也可以用整数和字符串来做到这一点
【讨论】:
【参考方案4】:称为“三元运算符”。
关于@Esqarrouth 的回答,我认为更好的格式是:
斯威夫特 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
【讨论】:
【参考方案5】:你是如此接近。只需要将它分配给一个变量:
self.automaticOption = (automaticOptionOfCar ? "Automatic" : "Manual")
编辑:
知道为什么不能将相同的表达式嵌入到字符串中吗?
你可以这样做:
let a = true
let b = 1
let c = 2
println("\(a ? 1: 2)")
【讨论】:
知道为什么不能将相同的表达式嵌入到字符串中吗? 嗯,但这不起作用println("something \(automaticOptionOfCar ? "Automatic" : "Manual")")
?【参考方案6】:
嗯,
如果您使用 + 运算符将条件与字符串连接起来,它应该可以工作。
因此,迈克是正确的。
var str = "Something = " + (1 == 1 ? "Yes" : "No")
【讨论】:
【参考方案7】:我在项目中使用的简单解决方案
Swift 3+
var retunString = (state == "OFF") ? "securityOn" : "securityOff"
【讨论】:
【参考方案8】:我使用过这样的内联条件:
isFavorite 函数返回一个布尔值
favoriteButton.tintColor = CoreDataManager.sharedInstance.isFavorite(placeId: place.id, type: 0) ? UIColor.white : UIColor.clear
tourOperatorsButton.isHidden = place.operators.count != 0 ? true : false
【讨论】:
【参考方案9】:对于多个条件,这可以像这样工作
let dataSavingTime: DataSavingTime = value == "0" ? .ThirtySecs : value == "1" ? .Timing1 : .Timing2
【讨论】:
以上是关于Swift内联条件?的主要内容,如果未能解决你的问题,请参考以下文章