我可以在字符串插值表达式中编写文字吗?怎么样?
"Number of items: \(items > 0 ? items :
的 "zero"
)"
答案 0 :(得分:4)
documentation似乎暗示在插值字符串中转义文字在某种程度上是可能的
您在插值字符串内的括号内写的表达式不能包含未转义的双引号(“)或反斜杠(),也不能包含回车符或换行符。
然而,据我所知,目前还没有办法。
可能的解决方法是字符串连接:
"Number of items: " + (items > 0 ? "\(items)" : "zero")
或仅使用变量
let nOfItems = items > 0 ? "\(items)" : "zero"
"Number of items: \(nOfItems)"
答案 1 :(得分:2)
作为@ Gabriele解决方案的替代方案,您还可以使用闭包,它具有在呈现字符串时进行评估的优势:
var items = 0
let formatString = { () -> String in
let expression = { () -> String in
return items > 0 ? String(items) : "zero"
}
return "Number of items: \(expression())"
}
formatString() // returns "Number of items: zero"
items = 12
formatString() // returns "Number of items: 12"
答案 2 :(得分:0)
现在可以使用Swift 2.1(从Xcode 7 beta 3开始)。
从发行说明:
以字符串形式插入的表达式现在可能包含字符串文字。
您的示例现在有效:
let result = "Number of items: \(items > 0 ? String(items) : "zero")"
在Swift 2.1中,对于您的具体示例,现在三元运算符的返回结果在Int和String之间存在类型不匹配,因此我不得不进行微小的更改 - 但"zero"
的相关部分现在有效