最近使用runtime实现Swift中字典转模型的时候,使用下面获取属性列表的方法无法获取声明为Bool类型的属性, 导致不能正确赋值.
var count: UInt32 = 0
let properties = class_copyPropertyList(className, &count) //属性列表
总结
- 纯Swift类型无法使用runtime运行时, 可以在属性、函数前面添加@objc, 它看可以把纯Swift的API导出给Objecttive-C使用
- 继承于NSObject的类,默认都是添加了@objc,可以使用OC中runtime来获取属性列表
- 加了@objc标识的方法、属性无法保证都会被运行时调用,因为Swift会做静态优化。要想完全被动态调用,必须使用dynamic修饰。使用dynamic修饰将会隐式的加上@objc标识
- 若方法的参数、属性类型为Swift特有(如Character、Tuple、Bool)、无法映射到Objective-C的类型,则此函数、属性无法添加dynamic修饰或@objc(会编译错误)