我试图打印一个继承自一个类的对象的所有值,下面是我的示例:
我创建了这个类:
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现在我想遍历所有的pikachu对象属性并打印值。我正在考虑一个for each循环,但我不确定如何实现它。
我知道我可以这样做:
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但是我只想遍历所有的值,而不是显式地写出函数中的每个属性。
发布于 2016-11-27 14:57:07
我找到了这样做的方式:
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)如果你想删除“可选的”,只需初始化属性即可。
发布于 2016-11-27 11:10:06
看起来像是
Swift支持反射吗?
或者,您也可以使用字典来存储的属性
类型。
例如:
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)")
}
}
}发布于 2021-03-01 21:35:52
使用
获取实例的属性
如果您正在使用NSObject开发iOS应用程序,则可能需要覆盖
描述
..。然后可以使用
若要打印实例,请执行以下操作。
镜像描述组成特定实例的部分,例如实例的存储属性、集合或元组元素或其活动枚举情况。
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中的反射
https://stackoverflow.com/questions/40825072
复制相似问题