首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >列出所有类属性swift 3

列出所有类属性swift 3
EN

Stack Overflow用户
提问于 2016-11-27 09:59:01
回答 3查看 3K关注 0票数 0

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

我创建了这个类:

代码语言:javascript
复制
class Pokemon {

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

创建对象并分配一些值:

代码语言:javascript
复制
var pikachu = Pokemon()

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

现在我想遍历所有的pikachu对象属性并打印值。我正在考虑一个for each循环,但我不确定如何实现它。

我知道我可以这样做:

代码语言:javascript
复制
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)

输出:

代码语言:javascript
复制
name: Pika Pika
level:1
type:electricity
exp: 0.0

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-11-27 14:57:07

我找到了这样做的方式:

代码语言:javascript
复制
let pokeMirror = Mirror(reflecting: pikachu)
let properties = pokeMirror.children

for property in properties {

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

}

输出:

代码语言:javascript
复制
name = Optional("Pika Pika")
type = Optional("electricity")
level = Optional(1)
exp = Optional(0.0)

如果你想删除“可选的”,只需初始化属性即可。

票数 8
EN

Stack Overflow用户

发布于 2016-11-27 11:10:06

看起来像是

Swift支持反射吗?

或者,您也可以使用字典来存储的属性

类型。

例如:

代码语言:javascript
复制
class Pokemon {
    var attributes = [String:Any?]()
}

var pikachu = Pokemon()

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

func printStats(pokemon: Pokemon) {
    pokemon.attributes.forEach { key, value in
        if let value = value {
            print("\(key): \(value)")
        }
    }
}
票数 1
EN

Stack Overflow用户

发布于 2021-03-01 21:35:52

使用

获取实例的属性

如果您正在使用NSObject开发iOS应用程序,则可能需要覆盖

描述

..。然后可以使用

若要打印实例,请执行以下操作。

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

代码语言:javascript
复制
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)

有关详细信息,请参阅

Swift中的反射

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40825072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档