3 回答

TA貢獻1744條經(jīng)驗 獲得超4個贊
這與接受的答案幾乎相同,但有一些額外的對話(我與Rob Napier,他的其他答案以及Cocoahead聚會的另一位朋友)和鏈接。
請參閱本討論中的評論。它的要點是:
該+
運營商的負荷過重,截至目前有27個不同的功能,所以如果你是串聯(lián)4串,即你有3個+
運營商的編譯器來檢查,每次27個運營商之間,所以這是27 ^ 3倍。但那不是它。
還有一個檢查,看看是否lhs
和rhs
的+
功能是,如果他們是它調(diào)用通過核心的兩個有效的append
調(diào)用。在那里你可以看到可能會發(fā)生一些密集的檢查。如果字符串是非連續(xù)存儲的,那么如果你正在處理的字符串實際上是橋接到NSString的話就是這種情況。然后,Swift必須將所有字節(jié)數(shù)組緩沖區(qū)重新組裝成一個連續(xù)的緩沖區(qū),并且需要在此過程中創(chuàng)建新的緩沖區(qū)。然后你最終得到一個包含你試圖連接在一起的字符串的緩沖區(qū)。
簡而言之,有3個編譯器檢查集群會降低你的速度,即每個子表達式都必須根據(jù)它可能返回的所有內(nèi)容重新考慮。因此,使用插值連接字符串即使用" My fullName is \(firstName) \(LastName)"
比"My firstName is" + firstName + LastName
插值沒有任何重載要好得多

TA貢獻1835條經(jīng)驗 獲得超7個贊
我有類似的問題:
expression was too complex to be solved in reasonable time; consider breaking up the expression into distinct sub-expressions
在Xcode 9.3中,行如下:
let media = entities.filter { (entity) -> Bool in
將其更改為以下內(nèi)容后:
let media = entities.filter { (entity: Entity) -> Bool in
一切順利。
可能它與Swift編譯器有關,試圖從代碼中推斷出數(shù)據(jù)類型。
- 3 回答
- 0 關注
- 715 瀏覽
添加回答
舉報