我正在尝试做这样的事情。我想测试一个类是否有一个给定名称的变量。
if(classInstance.hasProperty(test))
在示例中,我想测试test命名变量是否是该类的成员。我有什么方法可以做到吗?
答案 0 :(得分:2)
目前还没有一种纯粹的 Swift 方法(reflect
还不够),也许objc运行时方法可以提供帮助。使用class_copyIvarList
:
func hasProperty (obj: AnyObject, property: String) -> Bool {
var count: UInt32 = 0
var ivars: UnsafeMutablePointer<Ivar> = class_copyIvarList(obj.dynamicType, &count)
for i in 0..<count {
let name = NSString(CString: ivar_getName(ivars[Int(i)]), encoding: NSUTF8StringEncoding)
if name == property {
return true
}
}
return false
}
用法:
public class R {
private var aVar = "Hi"
private var anotherVar: Int = 0
}
hasProperty(R(), "anotherVar") // outputs true
答案 1 :(得分:2)
@ pNre解决方案的修改版本,没有遍历所有ivars:
func hasProperty (obj: AnyObject, property: String) -> Bool {
return property.withCString {
class_getInstanceVariable(obj.dynamicType, $0) != nil
}
}