2017-09-23 46 views
0

我一直在努力斯威夫特3相當長的時間才能夠元組排序如下斯威夫特4排序元組的錯誤

let count = self.array1.count 
let sortedTuples = (0..<count).map {(self.array2[$0], self.array3[$0], self.array1[$0], self.array4[$0], self.array5[$0], self.array6[$0], self.array7[$0], self.array8[$0])}.sorted { $0.0 > $1.0 } 
self.array2 = sortedTuples.map { $0.0 } 
self.array3 = sortedTuples.map { $0.1 } 
self.array1 = sortedTuples.map { $0.2 } 
self.array4 = sortedTuples.map { $0.3 } 
self.array5 = sortedTuples.map { $0.4 } 
self.array6 = sortedTuples.map { $0.5 } 
self.array7 = sortedTuples.map { $0.6 } 
self.array8 = sortedTuples.map { $0.7 } 

注意到,所有的數組String,除了array7UIColor

現在,當遷移到Swift 4時,出現錯誤;

表情太複雜,無法在合理的時間內解決;考慮 將表達式分解成不同的子表達式

如何將此長代碼分解爲更多行以滿足Xcode 9?

+0

這可能有助於指定類型'sortedTuples',而不是讓類型推斷數字爲你。 – Palle

+1

爲什麼你有8個並行陣列?這是一個很大的代碼氣味;考慮有*一個* 8個屬性的結構數組。 – Hamish

+0

@Hamish這是不可能通過巨大的代碼,我想這樣做 –

回答

1

如果我理解正確,您想對array2進行排序,並保持其他數組以相同的方式配對。而不是創建一個怪物元組的,你可以只排序array2其指數配對(這就是enumerated()那樣),然後使用分類指數重新映射其他陣列:

let sortedTuples = array2.enumerated().sorted { $0.1 > $1.1 } 
let indices = sortedTuples.map { $0.0 } 
self.array2 = indices.map { array2[$0] } 
self.array3 = indices.map { array3[$0] } 
self.array1 = indices.map { array1[$0] } 
self.array4 = indices.map { array4[$0] } 
self.array5 = indices.map { array5[$0] } 
self.array6 = indices.map { array6[$0] } 
self.array7 = indices.map { array7[$0] } 
self.array8 = indices.map { array8[$0] } 
+0

這是一種我沒有考慮過的方法:)和YES,它的工作原理不錯。謝謝vacawama。 BTW我喜歡你的描述我的元組:) :) –

+0

我很高興它的幫助! :) – vacawama