Swift 将struct属性名称作为参数传递,然后访问该属性

Swift 将struct属性名称作为参数传递,然后访问该属性,swift,accessor,Swift,Accessor,我想编写一个部分比较函数,为所有equalable结构定义,它能够比较两个结构实例,但忽略使用参数指定的任何属性。例如,unicorn运算符(可以将属性键路径传递给函数,并按如下方式使用它们: class Person: NSObject { dynamic var firstName: String = "" dynamic var lastName: String = "" init(firstName: String, lastName: String) {

我想编写一个部分比较函数,为所有
equalable
结构定义,它能够比较两个结构实例,但忽略使用参数指定的任何属性。例如,unicorn运算符(
可以将属性键路径传递给函数,并按如下方式使用它们:

class Person: NSObject {
    dynamic var firstName: String = ""
    dynamic var lastName: String = ""

    init(firstName: String, lastName: String) {
        self.firstName = firstName
        self.lastName = lastName
    }
}

func setProperty<T: NSObject>(object: T, path: String, value: Any) {
    object.setValue(value, forKey: path)
}

let firstNamePath = #keyPath(Person.firstName)
let chris = Person(firstName: "chris", lastName: "jones")
setProperty(object: chris, path: firstNamePath, value: "notChrisAnyMore")
print(chris.firstName)
类人员:NSObject{
动态变量firstName:String=“”
动态变量lastName:String=“”
init(firstName:String,lastName:String){
self.firstName=firstName
self.lastName=lastName
}
}
func setProperty(对象:T,路径:字符串,值:Any){
setValue(值,forKey:path)
}
让firstNamePath=#keyPath(Person.firstName)
让克里斯=人(名字:“克里斯”,姓氏:“琼斯”)
setProperty(对象:chris,路径:firstNamePath,值:“notChrisAnyMore”)
打印(chris.firstName)

很好。如果没有人提出坚持使用结构的方法,这将是公认的答案。我不认为使用结构可以做到这一点,可能是错误的:)