字符串插值表达式中的文字字面量。

4

我可以在字符串插值表达式中写文字吗?如何实现?

"物品数量:\(items > 0 ? items :"零")"

3个回答

4
文档似乎表明,在插值字符串中转义文字是可以实现的。插值字符串内部圆括号中的表达式不能包含未转义的双引号(")或反斜杠(\),也不能包含回车或换行符。然而,据我所知,目前没有这种方法。可能的解决方法是使用字符串连接:
"Number of items: " + (items > 0 ? "\(items)" : "zero")

或者只是使用一个变量。
let nOfItems = items > 0 ? "\(items)" : "zero"
"Number of items: \(nOfItems)"

你需要在你的解决方案中使用 "\(items)",否则它们将无法正常工作。 - vacawama

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"

你可以使用lazy var,虽然在这种特定情况下它似乎并不是一个大问题。 - Gabriele Petronella

0

现在使用Swift 2.1(自Xcode 7 beta 3以来)可以正常工作。

从发布说明中可以看到:

字符串插值表达式现在可以包含字符串字面量。

您的示例现在是有效的:

let result = "Number of items: \(items > 0 ? String(items) : "zero")"

在Swift 2.1中,针对您的特定示例,三元运算符返回结果的Int和String之间现在存在类型不匹配,因此我不得不进行微小的更改 - 但涉及“zero”的相关部分现在是有效的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接