斯威夫特4排序元组的错误

问题描述:

我一直在努力斯威夫特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这是不可能通过巨大的代码,我想这样做 –

如果我理解正确,您想对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