如何在 Swift 中动态创建对 属性 的引用
how can I create a reference to a property dynamically in Swift
我如何在 swift 中完成此操作。
let thing1 = whatever //instance property on class
let index = 1
var myThing = self["thing\(index)"] //does not work
如果你的 class 符合 NSObject 你可以使用这个:
class Obj : NSObject {
var a1 = "Hi"
}
let obj = Obj()
let ctr = 1
println (obj.valueForKey("a\(ctr)"))
要列出可用属性,您可以使用以下内容(来自另一个 SO 问题):
var count : UInt32 = 0
let classToInspect = Obj.self
let properties : UnsafeMutablePointer <objc_property_t> = class_copyPropertyList(classToInspect, &count)
var propertyNames : [String] = []
let intCount = Int(count)
for var i = 0; i < intCount; i++ {
let property : objc_property_t = properties[i]
let propertyName = NSString(UTF8String: property_getName(property))!
propertyNames.append(propertyName)
}
free(properties)
println(propertyNames)
我如何在 swift 中完成此操作。
let thing1 = whatever //instance property on class
let index = 1
var myThing = self["thing\(index)"] //does not work
如果你的 class 符合 NSObject 你可以使用这个:
class Obj : NSObject {
var a1 = "Hi"
}
let obj = Obj()
let ctr = 1
println (obj.valueForKey("a\(ctr)"))
要列出可用属性,您可以使用以下内容(来自另一个 SO 问题):
var count : UInt32 = 0
let classToInspect = Obj.self
let properties : UnsafeMutablePointer <objc_property_t> = class_copyPropertyList(classToInspect, &count)
var propertyNames : [String] = []
let intCount = Int(count)
for var i = 0; i < intCount; i++ {
let property : objc_property_t = properties[i]
let propertyName = NSString(UTF8String: property_getName(property))!
propertyNames.append(propertyName)
}
free(properties)
println(propertyNames)