Ios 迭代结构的静态属性
有没有一种简单的方法可以迭代结构的所有属性?我熟悉的非静态属性的方法是使用,但是当结构只包含静态属性时,这将返回一个空数组。以下是我努力实现的一个例子:Ios 迭代结构的静态属性,ios,swift,loops,struct,Ios,Swift,Loops,Struct,有没有一种简单的方法可以迭代结构的所有属性?我熟悉的非静态属性的方法是使用,但是当结构只包含静态属性时,这将返回一个空数组。以下是我努力实现的一个例子: struct Tree { static let bark = "Bark" static let roots = "Roots" } let treeParts = [String]() // insert code here to make treeParts = ["Bark", "Roots"] 因为我也对如何做到这
struct Tree {
static let bark = "Bark"
static let roots = "Roots"
}
let treeParts = [String]()
// insert code here to make treeParts = ["Bark", "Roots"]
因为我也对如何做到这一点感兴趣,所以我举了下面的例子。为什么不创建一个具有非静态属性的结构,再加上一个静态实例变量,使结构成为单例结构呢。下面的代码示例详细介绍了使用RESTAPI的命名语义将
Person
对象的值映射到JSON字典的示例用例。PersonJSONKeys
的属性名称必须与Person
的属性名称匹配
allProperties()
函数的代码来自。您可以轻松地修改此函数,以仅返回结构属性的值
struct PersonJSONKeys: PropertyLoopable {
static let instance: PersonJSONKeys = PersonJSONKeys()
private init() {}
let name = "name"
let firstName = "first_name"
let age = "age"
}
struct Person: PropertyLoopable {
let name = "Doe"
let firstName = "John"
let age = "18"
}
let person = Person()
let personProperties = person.allProperties()
var personJSON: [String:Any] = [:]
for jsonProperty in PersonJSONKeys.instance.allProperties() {
let propertyName = jsonProperty.key
let jsonKey = jsonProperty.value as! String
personJSON[jsonKey] = personProperties[propertyName]
}
由于该结构现在是一个单例结构,所以它的所有属性只会初始化一次,线程安全性由它的静态实例变量给出。我也在寻找它,最后使用了枚举。如果您只有一个静态值列表(但枚举也有一些限制,例如没有扩展…),这是一件好事:
我还没有尝试过这个,但您是在镜像结构或元类型的实例吗?我认为要获得静态属性,您必须镜像
Tree.type
。不确定您所说的.type是什么意思,我的结构没有该属性,但我尝试了.self,但没有得到任何结果。对不起,对了,应该说Tree.self
(我想的是大写字母-t”类型,但那是类型名,不是元类型对象)。太糟糕了,这不起作用。使用enum
的问题是无法扩展它。
enum Tree: String, CaseIterable {
case bark = "Bark"
case roots = "Roots"
}
let allTrees = Tree.allCases.map{ $0.rawValue }
print(allTrees) // => ["Bark", "Roots"]