Swift内联条件式?


77

如何在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)")

这可能是语法上的疏忽,您可能要在上面提交一个错误。我没有为此检查语法,但是值得注意的是,它不喜欢转义文字,只喜欢变量。就是 您不能这样做:println(“ hello \(” world“)”),但是您可以这样做:let world =“ world”; 如您所述,println(“ hello \(world)”)。总结起来,似乎想要一个变量而不是一个表达式。
克里斯·康诺佛

我会的,加油。同时,我将接受@MikeS答案作为目前的最佳选择
Duncan Groenewald 2014年

您需要在其后let doesnotexist留一个空格,否则将发生预处理程序错误,并确保您let fileExists: Bool在该println语句之前声明了实际在printSwift 2.0之前的位置。否则,我会尝试您的代码,但效果很好
NoodleOfDeath

Answers:


132

如果您正在寻找一种方法来执行此操作,则可以将?:操作从字符串插值中拉出,并使用以下命令串联+

let fileExists = false // for example
println("something " + (fileExists ? "exists" : "does not exist"))

输出:

不存在的东西


为什么这对我没有编译?`让答案=(enterName_text ==零)?“”:enterName_text.text!`
Elad Benda

@EladBenda最好不要作为注释,而应作为一个单独的问题,其中包含有关enterName_text是什么以及您得到的错误的详细信息。最好的猜测是您确实想要:如果让答案= enterName_text?.text {...}
Mike S

1
当我第一次尝试使用该三元运算符时,我认为它在Swift中不起作用。看着这里,找到了答案。问题(来自C / C ++背景)没有在'?'之间放置空格。还有第一个论点。'?' 在Swift中,对可选值进行了特殊处理,并且空格字符清楚表明它确实是三元运算符。
杰夫·缪尔

26

您可以使用Swift 3中引入的新的Nil-Coalescing运算符。如果为,它将返回默认值。someOptionalnil

let someValue = someOptional ?? ""

如果someOptionalnil,此运算符将分配""someValue


这是一个如此迅速的答案!正是我想要的。
–ustinrwh

20
var firstBool = true
var secondBool: Bool

firstBool == true ? (secondBool = true) : (secondBool = false)

如果在这种情况下,它将secondBool更改为firstBool是什么。您也可以使用整数和字符串


9

它称为“三元运算符”。

关于@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
}

6

好,

如果使用+运算符将条件与字符串连接在一起,则它应该起作用。

因此,迈克是正确的。

var str = "Something = " + (1 == 1 ? "Yes" : "No")

6

你好近哦。只需要将其分配给变量:

self.automaticOption = (automaticOptionOfCar ? "Automatic" : "Manual")

编辑:

知道为什么不能将同一表达式嵌入字符串吗?

您可以这样做:

let a = true
let b = 1
let c = 2

println("\(a ? 1: 2)")

知道为什么不能将同一表达式嵌入字符串吗?
Duncan Groenewald 2014年

嗯,但这行不通println("something \(automaticOptionOfCar ? "Automatic" : "Manual")")吗?
Duncan Groenewald 2014年


3

我有这样的内联条件:

isFavorite函数返回布尔值

favoriteButton.tintColor = CoreDataManager.sharedInstance.isFavorite(placeId: place.id, type: 0) ? UIColor.white : UIColor.clear

tourOperatorsButton.isHidden = place.operators.count != 0 ? true : false

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.