在OC中,没有绝对的私有,用运行时可以取出。
在Swift中,有绝对的私有,用private修饰的,是无法取出的。
下面是swift运行时获取对象属性列表的示例:
import UIKit
class Student: NSObject {
var name: String?
var age: Int = 0
var no: String?
class func propertyList() {
var count: UInt32 = 0
let prolist = class_copyPropertyList(self, &count)
for i in 0..<Int(count) {
let pro = prolist?[i]
// 获取 `属性` 的名称C语言字符串
let proString = property_getName(pro!)
// 转化成 String的字符串
let proName = String(utf8String: proString!)
print(proName!)
}
// 释放 C 语言的对象
free(prolist)
}
}
- 在控制器中调用如下:
print(Student.propertyList())
- 输出结果如下:
name
age
no
()