Swift 是否可以使用动态属性跨兄弟类保存重复排序代码?
我有多个类,它们都继承自Swift 是否可以使用动态属性跨兄弟类保存重复排序代码?,swift,sorting,optimization,Swift,Sorting,Optimization,我有多个类,它们都继承自RootClass RootClass有一个class函数,返回该类所有实例的数组,称为fetchAll() 因此,要获得子类的所有实例的数组,代码应该是: let subclass1Array=SubClass1.fetchAll() 现在,我制作了一个自定义函数来包装这个数组,但是在返回之前对数组进行排序 let allSubObjects1 = try! SubClass1.fetchAll() let sortedSubObjects1 = allSubObjec
RootClass
RootClass
有一个class函数,返回该类所有实例的数组,称为fetchAll()
因此,要获得子类的所有实例的数组,代码应该是:let subclass1Array=SubClass1.fetchAll()
现在,我制作了一个自定义函数来包装这个数组,但是在返回之前对数组进行排序
let allSubObjects1 = try! SubClass1.fetchAll()
let sortedSubObjects1 = allSubObjects1.sorted {
if $0.prop1 == $1.prop1 {
return $0.prop2 ?? "" < $1.prop2 ?? ""
} else {
return $0.prop1 ?? "" < $1.prop1 ?? ""
}
}
return sortedSubObjects1
在理想情况下,我有一个函数,它接受N个属性数组进行排序,[prop1,prop2]
或[prop1,prop2,prop3]
,然后它只返回这些根类
子类的排序数组方法1(下面的代码):
- 创建一个名为
的属性,每个类都可以有一个自定义实现sortWeight
- 因此,每个类都决定了它需要如何排序
(Keypath
相当于Swift
)valueForKey
- 参考:
if $0.prop1 == $1.prop1 {
if $0.prop2 == $1.prop2 {
return $0.prop3 ?? "" < $1.prop3 ?? ""
} else {
return $0.prop2 ?? "" < $1.prop2 ?? ""
}
} else {
return $0.prop1 ?? "" < $1.prop1 ?? ""
}
class RootClass : CustomStringConvertible {
var prop1 : Int
init(prop1: Int) {
self.prop1 = prop1
}
var description: String {
return String(prop1)
}
var sortWeight : Int {
return prop1
}
}
class ClassA : RootClass {
var prop2 : Int
init(prop1: Int, prop2: Int) {
self.prop2 = prop2
super.init(prop1: prop1)
}
override var sortWeight : Int {
return (prop2 * 10 + prop1)
}
override var description: String {
return "(\(prop1), \(prop2))"
}
}
print("RootClass:")
var array : [RootClass] = [RootClass(prop1: 15), RootClass(prop1: 6), RootClass(prop1: 12)]
array.sort(by: { $0.sortWeight < $1.sortWeight })
print(array)
print("\nSubclass:")
array = [ClassA(prop1: 8, prop2: 3), ClassA(prop1: 4, prop2: 2)]
array.sort(by: { $0.sortWeight < $1.sortWeight })
print(array)
RootClass:
[6, 12, 15]
Subclass:
[(4, 2), (8, 3)]