【发布时间】:2021-01-09 12:58:35
【问题描述】:
class ComparedObject {
let id: String
let order: Int
...
}
class Object1 {
let id: String
let name: String
...
}
class Object2 {
let id: String
let x: Float
...
}
class Object3 {
let id: String
let y: Int
...
}
class Object4 {
let id: String
let z: Double
...
}
var comparedList: [ComparedObject] = [ComparedObject, ComparedObject, ComparedObject, ComparedObject]
var list = [AnyObject] = [Object2, Object1, Object3, Object4]
我有四个类,都有 id: String 属性。
我想将它们存储到一个 (AnyObject) 数组中以显示在 UICollectionView 中。
那么如何使用 compareList id 属性对列表数组进行排序?
comparedList 已经排序。
我想要从比较列表 id 属性中排序列表数组:
var comparedList = [
ComparedObject(id: "01d7da417657", order: 0),
ComparedObject(id: "61a96d769843", order: 1),
ComparedObject(id: "5047abd36432", order: 2),
ComparedObject(id: "3213f37a4003", order: 3)
]
var list = [
Object2(id: "3213f37a4003", x: 34.0),
Object1(id: "61a96d769843", name: "name"),
Object3(id: "01d7da417657", y: 9),
Object4(id: "5047abd36432", z: 0.3)
]
到这里:
var list = [
Object3(id: "01d7da417657", y: 9),
Object1(id: "61a96d769843", name: "name"),
Object4(id: "5047abd36432", z: 0.3),
Object2(id: "3213f37a4003", x: 34.0)
]
最后我这样做了:
comparedList = comparedList.sorted { $0.order < $1.order }
var comparedOrder = comparedList.map { $0.id }
list.sort { (comparedOrder.firstIndex(of: $0.id)! < comparedOrder.firstIndex(of: $1.id)! }
【问题讨论】:
-
可以做到,但是使用协议来定义呢?你试过了吗?
-
抱歉,我更新了我的问题。