像这样的代码:
测试类
class test {
var name: String!
var age: String!
var pu: Int!
}
测试函数
func variableMap() {
let ivars = class_copyIvarList(test.self, &temp.count)
if ivars != nil {
for i in 0..<Int(temp.count) {
let thisIvar: Ivar = ivars[i]
let type = ivar_getTypeEncoding(thisIvar)
let str = String(CString: type, encoding: NSUTF8StringEncoding)
var key = String(UTF8String: ivar_getName(thisIvar))
let type1 = String(CString: type, encoding: NSProprietaryStringEncoding)
print("\(key!)")
print("\(type1!)")
}
free(ivars)
}
}
但是打印
name
age
pu
问题:
我使用 let type = ivar_getTypeEncoding(thisIvar)
但返回“”而不是属性的类型。我该如何解决这个问题?
最佳答案
Swift 可能正在使用内部包装器将这些 ivars
桥接到 ObjC 中。我能让它工作的唯一方法是在 ObjC 中定义类 test
:
@interface test : NSObject
@property NSString * name;
@property NSString * age;
@property int pu;
@end
您可以在那里定义所有属性,然后在 Swift 中扩展该类。
你的代码也有错误:
let type1 = String(CString: type, encoding: NSProprietaryStringEncoding)
^ should be NSUTF8StringEncoding
关于swift - ivar_getTypeEncoding swift 返回 "",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37604429/