在Swift中是否有一种简单的方法来迭代类的属性.
即我有一个类Person,它有3个属性:name,lastname,age.
是否有类似的东西
for attribute in Person {
println("\(attribute): \(attribute.value)")
}
Run Code Online (Sandbox Code Playgroud)
输出将是例如:
name: Bob
lastname: Max
age: 20
Run Code Online (Sandbox Code Playgroud)
moh*_*acs 56
他们已经删除了Swift 2.0中的反射.这就是我枚举属性和值的方式.
class People {
var name = ""
var last_name = ""
var age = 0
}
var user = People()
user.name = "user name"
user.last_name = "user lastname"
user.age = 20
let mirrored_object = Mirror(reflecting: user)
// Swift 2
for (index, attr) in mirrored_object.children.enumerate() {
if let property_name = attr.label as String! {
print("Attr \(index): \(property_name) = \(attr.value)")
}
}
// Swift 3 and after
for (index, attr) in mirrored_object.children.enumerated() {
if let property_name = attr.label as String! {
print("Attr \(index): \(property_name) = \(attr.value)")
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
Attr 0:name =用户名
Attr 1:last_name =用户lastname
Attr 2:age = 20
Tee*_*ppa 12
是的,如果您只需要打印结构或类的属性,并且属性是简单类型(如String和Int),则可以使用reflect
和MirrorType
.
func print_properties(mirror: MirrorType) {
for i in 0..<mirror.count {
let (name, childMirror) = mirror[i]
let value = childMirror.value
println("\(i): \(name) = \(value)")
}
}
struct Person {
let first_name: String
let last_name: String
let age: Int
}
let john = Person(first_name:"John", last_name:"Doe", age:27)
let mirror = reflect(john)
print_properties(mirror)
Run Code Online (Sandbox Code Playgroud)
如果你有嵌套的结构,枚举,你需要做更多的工作.
正如@mohacs所建议的那样,您可以在所需的类中提供函数Description,如下所示;
func description() -> String{
let mirrored_object = Mirror(reflecting: self)
let str:NSMutableString = NSMutableString()
for (index, attr) in mirrored_object.children.enumerated() {
if let property_name = attr.label as String! {
str.append(" Attr \(index): \(property_name) = \(attr.value)")
}
}
//print("desc=\(str)")
return str as String
}
Run Code Online (Sandbox Code Playgroud)
然后简单地调用此实例方法
let jsonOb:JsonModel = self.ObjArray[Index]
print("jsonOb = \(jsonOb.description())")
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
17401 次 |
最近记录: |