ios - 查找两个对象之间更改的属性

标签 ios swift diff

我正在研究实体差异算法。我试图找到两个对象之间的更改属性,如之前和之后。是否可以比较两个对象的值?它们都是 Any 类型,无法比较。

import Foundation

class Person {
    var gender: Gender = .female
    let dateOfBirth: Date

    init(dateOfBirth: Date) {
        self.dateOfBirth = dateOfBirth
    }

    class func GetDateFromString(DateStr: String)-> Date
    {
        let calendar = NSCalendar(identifier: NSCalendar.Identifier.gregorian)
        let DateArray = DateStr.components(separatedBy: "/")
        let components = NSDateComponents()
        components.year = Int(DateArray[2])!
        components.month = Int(DateArray[1])!
        components.day = Int(DateArray[0])!
        components.timeZone = TimeZone(abbreviation: "GMT+0:00")
        let date = calendar?.date(from: components as DateComponents)

        return date!
    }

    enum Gender {
        case male
        case female
        case unknown
    }


    func update(oldValue: Person?,entity: Person) {
        if let oldValue = oldValue {
            let mirror1 = Mirror(reflecting: oldValue)
            let mirror2 = Mirror(reflecting: entity)


            for (child1,child2) in zip(mirror1.children,mirror2.children){
                if let dob1 = child1 as? Gender, let dob2 = child2 as? Gender {
                    if dob1 == dob2 {
                        print("not equal")
                    }
                }
            }

        }
    }

}

extension Person: Equatable {
    static func == (lhs: Person, rhs: Person) -> Bool {
        return lhs.gender == rhs.gender && lhs.dateOfBirth == rhs.dateOfBirth
    }
}




let user1 = Person(dateOfBirth: Person.GetDateFromString(DateStr: "12/1/1987"))
let user2 = Person(dateOfBirth: Person.GetDateFromString(DateStr: "10/10/1987"))
user1.gender = .male

最佳答案

如果你只关心平等,你可以符合 Equatable协议(protocol)。如果您需要大于/小于比较,您可以符合 Comparable .以下是如何使用 equatable 的示例:

extension Person: Equatable {
    static func == (lhs: Person, rhs: Person) -> Bool {
        return lhs.gender == rhs.gender && lhs.dateOfBirth == rhs.dateOfBirth
    }
}

关于ios - 查找两个对象之间更改的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48012547/

相关文章:

objective-c - 在 iOS 中运行后台服务

diff - 如何在 Mac 上打开 .diff 文件?

git 告诉我我的文件被更改了,但我看不出有什么不同

git - 如何比较本地 Git 分支与其远程分支

ios - 如何以编程方式在 TextView 中设置文本样式?

ios - 回收标签栏空间

ios - 比较 2 个 NSMutableArrays 并删除重复记录

swift - 检查 ARReferenceImage 在相机 View 中是否不再可见

ios - 泛型的偏函数应用

ios - 在 swift 4.2 中发送到实例的无法识别的选择器