在 Swift 中迭代对象类属性 [英] iterate over object class attributes in Swift

查看:36
本文介绍了在 Swift 中迭代对象类属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Swift 中是否有一种简单的方法来迭代类的属性.

即我有一个 Person 类,它有 3 个属性:姓名、姓氏、年龄.

有没有类似的东西

 用于 Person { 中的属性println("\(attribute): \(attribute.value)")}

输出例如:

姓名:鲍勃姓氏:Max年龄:20

解决方案

他们在 Swift 2.0 中移除了反射.这就是我枚举属性和值的方式.

class People {var name = "";var last_name = "";变量年龄 = 0}var 用户 = 人()user.name = "用户名";user.last_name = "用户姓氏";用户.年龄 = 20让 mirrored_object = Mirror(反射:用户)//斯威夫特 2for (index, attr) in mirrored_object.children.enumerate() {如果让 property_name = attr.label 作为 String!{打印(属性\(索引):\(property_name)= \(属性值)")}}//Swift 3 及更高版本for (index, attr) in mirrored_object.children.enumerated() {如果让 property_name = attr.label 作为 String!{打印(属性\(索引):\(property_name)= \(属性值)")}}

<块引用>

输出:
属性 0:名称 = 用户名
属性 1:last_name = 用户姓氏
属性 2:年龄 = 20

Is there a Simple way in Swift to iterate over the attributes of a class.

i.e. i have a class Person, and it has 3 attributes: name, lastname, age.

is there something like

for attribute in Person {
     println("\(attribute): \(attribute.value)")
}

the output would be for example:

name: Bob
lastname: Max
age: 20

解决方案

They have removed reflect within Swift 2.0. This is how I am enumerating attributes and values.

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 later
for (index, attr) in mirrored_object.children.enumerated() {
    if let property_name = attr.label as String! {
        print("Attr \(index): \(property_name) = \(attr.value)")
    }
}

Output:
Attr 0: name = user name
Attr 1: last_name = user lastname
Attr 2: age = 20

这篇关于在 Swift 中迭代对象类属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆