3 回答
TA貢獻1744條經驗 獲得超4個贊
這與接受的答案幾乎相同,但有一些額外的對話(我與Rob Napier,他的其他答案以及Cocoahead聚會的另一位朋友)和鏈接。
請參閱本討論中的評論。它的要點是:
該+運營商的負荷過重,截至目前有27個不同的功能,所以如果你是串聯4串,即你有3個+運營商的編譯器來檢查,每次27個運營商之間,所以這是27 ^ 3倍。但那不是它。
還有一個檢查,看看是否lhs和rhs的+功能是,如果他們是它調用通過核心的兩個有效的append調用。在那里你可以看到可能會發生一些密集的檢查。如果字符串是非連續存儲的,那么如果你正在處理的字符串實際上是橋接到NSString的話就是這種情況。然后,Swift必須將所有字節數組緩沖區重新組裝成一個連續的緩沖區,并且需要在此過程中創建新的緩沖區。然后你最終得到一個包含你試圖連接在一起的字符串的緩沖區。
簡而言之,有3個編譯器檢查集群會降低你的速度,即每個子表達式都必須根據它可能返回的所有內容重新考慮。因此,使用插值連接字符串即使用" My fullName is \(firstName) \(LastName)"比"My firstName is" + firstName + LastName插值沒有任何重載要好得多
TA貢獻1835條經驗 獲得超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將其更改為以下內容后:
let media = entities.filter { (entity: Entity) -> Bool in一切順利。
可能它與Swift編譯器有關,試圖從代碼中推斷出數據類型。
- 3 回答
- 0 關注
- 733 瀏覽
添加回答
舉報
