I'm trying to set properties of an object using a String of the name of the property in Swift 3.
So I have the code:
func populate(value: Any, byPropertyName name: String, intoInstance instance: inout AnyObject) {
let namePointer = NSString(string: name).utf8String
let ivar = class_getInstanceVariable(type(of: instance), namePointer)
let fieldOffset = ivar_getOffset(ivar)
let ivarName = String(cString: ivar_getName(ivar))
print("setting value for property \(ivarName) into instance \(instance.classForCoder), offset is \(fieldOffset)")
withUnsafeMutablePointer(to: &instance) { (pointer) -> Void in
var pointerToField = UnsafeMutablePointer<AnyObject>(pointer + fieldOffset)
pointerToField.pointee = value as AnyObject
print("pointee now has value \(pointerToField.pointee)")
}
}
@objc(TestObject) class TestObject: NSObject {
fileprivate(set) var name: String?
fileprivate(set) var age: Int?
fileprivate(set) var height: Float?
required override init() {
super.init()
}
}
var object = TestObject()
var anyObject = object as AnyObject
populate(value: Int(10), byPropertyName: "age", intoInstance: &anyObject)
After this code, the age property is still nil. Anyone knows whats happening?
Thanks
Aucun commentaire:
Enregistrer un commentaire