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。如果someOptionalnil,它将返回默认值。

let someValue = someOptional ?? ""

这里,如果someOptionalnil,则此运算符会将"" 分配给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内联条件?的主要内容,如果未能解决你的问题,请参考以下文章

反应内联条件

React 内联条件组件属性

如何为多个条件编写内联 ng 样式

字符串 [] 数组中的 C# 内联条件

Jade 条件(if/else)将类添加到 div 内联

具有本机反应的条件内联样式[重复]