添加这行代码会导致编译时间从10秒增加到3分钟。
var resultsArray = hashTagParticipantCodes + prefixParticipantCodes + asterixParticipantCodes + attPrefixParticipantCodes + attURLParticipantCodes
将其更改为此会使编译时间恢复正常。
var resultsArray = hashTagParticipantCodes
resultsArray += prefixParticipantCodes
resultsArray += asterixParticipantCodes
resultsArray += attPrefixParticipantCodes
resultsArray += attURLParticipantCodes
为什么第一行会导致我的编译时间大幅减慢,并且有一种更优雅的方式来合并这些数组而不是我发布的5行解决方案?
答案 0 :(得分:11)
总是+
。每当人们抱怨爆炸性编译时,我会问“你有链接+
吗?”它始终是肯定的。这是因为+
如此严重超载。也就是说,我认为这在Xcode 8中要好得多,至少在我的快速实验中是这样。
您可以通过加入数组而不是添加数组来显着加快速度而不需要var
:
let resultsArray = [hashTagParticipantCodes,
prefixParticipantCodes,
asterixParticipantCodes,
attPrefixParticipantCodes,
attURLParticipantCodes]
.joinWithSeparator([]).map{$0}
最后的.map{$0}
是强制它回到数组中(如果你需要它,否则你可以使用懒惰的FlattenCollection)。你也可以这样做:
let resultsArray = Array(
[hashTagParticipantCodes,
prefixParticipantCodes,
asterixParticipantCodes,
attPrefixParticipantCodes,
attURLParticipantCodes]
.joinWithSeparator([]))
但是检查Xcode 8;我相信这至少是部分修复的(但使用.joined()
仍然要快得多,即使在Swift 3中也是如此。)