問題
Expression was too complex to be solved in reasonable time
解決方案
Swift對類型推斷的使用使我們的代碼更短,更易於閱讀,但同時也佔用了大量CPU時間。 有時,值可能是幾種類型之一,如果它與可能是幾種類型之一的另一種東西一起使用,那麼Swift要做的工作量就會成倍增加。 如果Swift遇到的可能性太多,以至於大約15秒後根本無法弄清,它就會拋出錯誤:“表達太複雜,無法在合理的時間內解決; 考慮將表達式分成不同的子表達式。”
Swift團隊正在努力爲每個新版本的Swift進行改進,並且編譯器何時會拋出此錯誤沒有真正的固定界限。 幸運的是,此錯誤消息告訴您要解決此問題的確切方法:將表達式分成多個子表達式。
例如,這種代碼在現代Mac上編譯幾乎需要2秒鐘:
let sum = [1, 2, 3].map { String($0) }.compactMap { Int($0) }.reduce(0, +)
在較舊的Mac上,Swift確實很掙扎,因此,明智的做法是將其分解爲多個子表達式,如下所示:
let numbers = [1, 2, 3]
let stringNumbers = numbers.map { String($0) }
let intNumbers = stringNumbers.flatMap { Int($0) }
let sum = intNumbers.reduce(0, +)
修復Macawbug
問題代碼
let a = { i in
m1[i] + c * m2[i] + s * m3[i]
}
修復後
/*
let a = { i in
m1[i] + c * m2[i] + s * m3[i]
}
*/
self.init(values: [
acal(i:0, m1: m1, c: c, m2: m2, s: s, m3: m3),
acal(i:1, m1: m1, c: c, m2: m2, s: s, m3: m3),
acal(i:2, m1: m1, c: c, m2: m2, s: s, m3: m3),
0,
0,
acal(i:3, m1: m1, c: c, m2: m2, s: s, m3: m3),
acal(i:4, m1: m1, c: c, m2: m2, s: s, m3: m3),
acal(i:5, m1: m1, c: c, m2: m2, s: s, m3: m3),
0, 0,
acal(i:6, m1: m1, c: c, m2: m2, s: s, m3: m3),
acal(i:7, m1: m1, c: c, m2: m2, s: s, m3: m3),
acal(i:8, m1: m1, c: c, m2: m2, s: s, m3: m3),
0, 0,0, 0, 0, 1, 0])
}
}
func acal(i:Int,m1:[Double],c:Double,m2:[Double],s:Double,m3:[Double]) -> Double {
return m1[i] + c * m2[i] + s * m3[i]
}
推薦
基礎文章推薦
經典教程推薦
上新
技術源碼推薦
推薦文章
CoreData篇
Combine篇
TextField篇
- 《SwiftUI 一篇文章全面掌握TextField文本框 (教程和全部源碼)》
- 《SwiftUI實戰之TextField風格自定義與formatters》
- 《SwiftUI實戰之TextField如何給鍵盤增加個返回按鈕(隱藏鍵盤)》
- 《SwiftUI 當鍵盤出現時避免TextField被遮擋自動向上移動》
- 《SwiftUI實戰之TextField如何給鍵盤增加個返回按鈕(隱藏鍵盤)》
JSON文件篇
一篇文章系列
- SwiftUI一篇文章全面掌握List(教程和源碼)
- 《SwiftUI 一篇文章全面掌握TextField文本框 (教程和全部源碼)》
- SwiftUI一篇文章全面掌握Picker,解決數據選擇(教程和源碼)
- SwiftUI一篇文章全面掌握Form(教程和源碼)
- SwiftUI Color 顏色一篇文章全解決
技術交流
QQ:3365059189
SwiftUI技術交流QQ羣:518696470
- 請關注我的專欄icloudend, SwiftUI教程與源碼
https://www.jianshu.com/c/7b3e3b671970