在閱讀HandyJSON框架的時(shí)候,想到swift是如何獲取所有屬性的。Objective-C里面都知道,可以通過runtime的class_copyPropertyList來反射賦值。但是純swift類是和NSObject不同的。簡單搜索了一圈,多數(shù)人還是在說OC里的運(yùn)行時(shí)。
蘋果提供了一個(gè)方法,可以直接反射獲取屬性名稱和類型,但是不能像runtime那樣可以直接操作賦值,直接上HandyJSON作者的一個(gè)原話吧
Mirror(reflecting: Animal()).children.forEach { (child) in
print(child.label ?? "") // 獲取字段名
print(type(of: child.value)) // 獲取字段類型
}
例:
class User {
var age: Int?
var name: String?
var height: Float
}
輸出:
age
Optional<Int>
name
Optional<String>
height
Float