저는 엔티티 차이 알고리즘을 연구 중입니다. 전후의 두 객체간에 변경된 속성을 찾으려고합니다. 두 객체의 값을 비교할 수 있습니까? 둘 다 유형이 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
개체에 'Comparable'을 적용합니다. Btw : 함수와 변수 이름이 소문자로 시작하는 명명 규칙을 준수하십시오. 그리고 Swift 3+에서 NSCalendar와 NSDateComponents를 사용할 필요가 없습니다. – vadian
전체 코드에서 수행하려는 작업이 확실하지 않습니다. 그러나'dob1 = child1 as just? '을 변경하면 캐스트가 성공할 것입니다. 성별'로'dob1 = child1.value? 성별' – jpetrichsr