在閱讀HandyJSON框架的時候,想到swift是如何獲取所有屬性的身害。Objective-C里面都知道,可以通過runtime的class_copyPropertyList
來反射賦值。但是純swift類是和NSObject不同的展鸡。簡單搜索了一圈姨丈,多數(shù)人還是在說OC里的運(yùn)行時畅卓。
蘋果提供了一個方法,可以直接反射獲取屬性名稱和類型构挤,但是不能像runtime那樣可以直接操作賦值髓介,直接上HandyJSON作者的一個原話吧
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