2014-09-23 54 views

回答

4

documentation似乎表明,在插值字符串逃逸文字在某種程度上可能

你寫內部的表達式插值字符串中的括號不能包含轉義雙引號( 「)或反斜槓(),並且不能包含回車或換行符

但是,據我所知,目前沒有辦法。

可能的解決方法是字符串連接:

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

,或者乾脆利用一個可變

let nOfItems = items > 0 ? "\(items)" : "zero" 
"Number of items: \(nOfItems)" 
+0

您需要在變通方法中使用'「\(items)」',否則它們將無法工作。 – vacawama 2014-09-23 17:05:29

+0

@vacawama公平點,謝謝 – 2014-09-23 17:08:15

2

作爲替代@加布裏埃爾的解決方案,你也可以使用封,其中有一個是優勢在渲染字符串時評估

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" 
+0

或者您可以使用'lazy var',儘管在這個特定情況下它看起來不是一個大問題。 – 2014-09-23 15:17:19

0

它現在適用於Swift 2.1(自Xcode 7 beta 3以來)。

從發行說明:

表達的串插現在可以包含字符串文字。

你舉的例子是現在有效:

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

在雨燕2.1爲您具體的例子,現在有一個爲三元運算符的返回結果int和string之間的類型不匹配,所以我不得不做出一個微小的變化 - 但與"zero"相關的部分現在是有效的。