将不同类型的对象与共享属性

时间:2017-07-12 20:59:53

标签: arrays swift sorting realm

我有多个排序的数组,每个数组都有一个特定的类型。我需要将这些排序的数组合并在一起,以生成Any类型的排序数组。即使对象不同,每个对象都有一个我想要用于排序的公共属性date: Date

不幸的是,我不能将原始对象子类化,因为我使用的是Realm(必须从Object继承),这意味着我不能拥有任何继承。

您如何改变类以合并和排序数组?我不确定如何以一种非hacky的方式比较对象。非常愿意修改类(只要符合Realm的要求:https://realm.io/docs/swift/latest/

示例代码:

    import RealmSwift

    class Example1: Object {
        dynamic var text: String = ""
        dynamic var date: Date?

    }

    class Example2: Object {
        dynamic var num: Int = 0
        dynamic var date: Date?
    }

// there would be a sorted array of type Example1 and a sorted array of type Example2
// I would need to merge these two arrays and sort them based on the date property

2 个答案:

答案 0 :(得分:2)

我建议你使用协议,你可以从这样的东西开始:

protocol DateProtocol {
    var date: Date? { get set }
}

然后使两个类符合DateProtocol协议。

之后,您可以将您的课程视为 DateProtocol 并访问其日期属性。

您可以这样做:

var mergedArray: [DateProtocol] = example1Array as! [DateProtocol] + example2Array as! [DateProtocol]
mergedArray.sorted({ $0.date > $1.date })
祝你好运!

答案 1 :(得分:0)

这样的东西?我没有领域,但希望Object允许您为Custom对象创建动态var。

protocol Custom {
    var date: Date? { get set }
}

class CustomObject: Custom {
    var data : Any?
    var date: Date?
    init (d : Any) {
        data = d
    }
}

let co : CustomObject = CustomObject(d: "Meow")
let co2 : CustomObject = CustomObject(d: 2)

// This should be Object, not NSObject, but I don't have Realm installed.
class RealmObj : NSObject {
    var obj : CustomObject? // Make dynamic in your code.
}

let ro = RealmObj()

ro.obj = co2