mat*_*bor 6 struct loops ios swift
是否有一种简单的方法来迭代结构的所有属性?我熟悉的非静态属性的方法是使用Mirror,但是当struct只包含静态属性时,这会返回一个空数组.这是我想要实现的一个例子:
struct Tree {
static let bark = "Bark"
static let roots = "Roots"
}
let treeParts = [String]()
// insert code here to make treeParts = ["Bark", "Roots"]
Run Code Online (Sandbox Code Playgroud)
因为我也对如何做到这一点感兴趣,所以我做了下面的例子。为什么不直接创建具有非静态属性和静态实例变量的结构,这使得该结构成为单例。以下代码示例详细介绍了Person使用 REST API 的命名语义将对象的值映射到 JSON 字典的示例用例。的属性名称PersonJSONKeys必须与 的属性名称匹配Person。
该allProperties()函数的代码来自如何在 Swift 中循环遍历结构属性?。您可以轻松修改此函数以仅返回结构属性的值。
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]
}
Run Code Online (Sandbox Code Playgroud)
由于 Struct 现在是单例,因此它的所有属性将仅初始化一次,并且线程安全性由其静态实例变量给出。
| 归档时间: |
|
| 查看次数: |
906 次 |
| 最近记录: |