列出所有类属性swift 3

时间:2016-11-27 01:59:01

标签: class foreach attributes swift3

我试图打印一个继承自类的对象的所有值,这是我的例子:

我创建了这个类:

 class Pokemon {

 var name: String?
 var type: String?
 var level: Int?
 var exp = 0.0
}

创建对象并指定一些值:

var pikachu = Pokemon()

pikachu.name = "Pika Pika"
pikachu.level = 1
pikachu.type = "electricity"
pikachu.exp = 0

现在我想遍历所有皮卡丘对象属性并打印值。我正在为每个循环思考,但我不确定如何实现它。

我知道我可以这样做:

func printStats(pokemon: Pokemon) {

if pokemon.name != nil {

    print(" name: \(pokemon.name!)\n level:\(pokemon.level!)\n type:\(pokemon.type!)\n exp: \(pokemon.exp!)")

 }
}

printStats(pokemon: pikachu)

输出:

name: Pika Pika
level:1
type:electricity
exp: 0.0

但我只想循环遍历所有值,而不是显式写入函数中的每个属性。

3 个答案:

答案 0 :(得分:4)

我找到了这样做的方式:

let pokeMirror = Mirror(reflecting: pikachu)
let properties = pokeMirror.children

for property in properties {

  print("\(property.label!) = \(property.value)")

}

输出:

name = Optional("Pika Pika")
type = Optional("electricity")
level = Optional(1)
exp = Optional(0.0)

如果你想删除" Optional"只是初始化属性。

答案 1 :(得分:2)

看起来像是Does Swift support reflection?

的副本

或者,您可以使用字典存储element(by.id('result0')).isPresent().then(function (result) { if (result) { browser.ignoreSynchronization = true; element(by.id('result0')).click(); browser.sleep(3000); // TODO: use ExpectedConditions? expect(element(by.css('h2.modal-title')).isPresent()).toBe(true); } else { expect(element(by.css('h2.modal-title')).isPresent()).toBe(false); } }); browser.ignoreSynchronization = false; 类型的属性。

e.g。

Any?

答案 2 :(得分:0)

    1. 使用 Mirror API 获取实例的属性
    1. 如果您正在使用 NSObject 开发 iOS 应用程序,您可能需要覆盖 description。然后可以使用 print 打印实例。
<块引用>

镜像描述组成特定实例的部分,例如实例的存储属性、集合或元组元素,或其活动枚举案例。

class YourClass: NSObject {
  public override var description: String {
        var des: String = "\(type(of: self)) :"
        for child in Mirror(reflecting: self).children {
            if let propName = child.label {
                des += "\(propName): \(child.value) \n"
            }
        }
     
        return des
    }
}

let instance = YourClass()
print(instance)

Reflection in Swift中查看更多