字符串插值表达式中的文字

时间:2014-09-23 14:32:16

标签: swift

我可以在字符串插值表达式中编写文字吗?怎么样?

"Number of items: \(items > 0 ? items : "zero" )"

3 个答案:

答案 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"的相关部分现在有效