gpt4 book ai didi

swift - 在 Swift 中通过下标访问属性

转载 作者:IT王子 更新时间:2023-10-29 05:16:50 34 4
gpt4 key购买 nike

我在 Swift 中有一个自定义类,我想使用下标访问它的属性,这可能吗?

我想要的是这样的:

class User {
var name: String
var title: String

subscript(key: String) -> String {
// Something here
return // Return the property that matches the key…
}

init(name: String, title: String) {
self.name = name
self.title = title
}
}

myUser = User(name: "Bob", title: "Superboss")
myUser["name"] // "Bob"

更新:我寻找这个的原因是我正在使用 GRMustache从 HTML 模板呈现。我希望能够将我的模型对象传递给 GRMustache 渲染器……

GRMustache fetches values with the keyed subscripting objectForKeyedSubscript: method and the Key-Value Coding valueForKey: method. Any compliant object can provide values to templates.

https://github.com/groue/GRMustache/blob/master/Guides/view_model.md#viewmodel-objects

最佳答案

这是一个使用反射的技巧。可以使用以下内容。

protocol PropertyReflectable { }

extension PropertyReflectable {
subscript(key: String) -> Any? {
let m = Mirror(reflecting: self)
for child in m.children {
if child.label == key { return child.value }
}
return nil
}
}

struct Person {
let name: String
let age: Int
}

extension Person : PropertyReflectable {}

然后创建一个 Person 并访问它的键控属性。

let p = Person(name: "John Doe", age: 18)

p["name"] // gives "John Doe"
p["age"] // gives 18

您可以修改下标以始终返回属性值的内插字符串。

关于swift - 在 Swift 中通过下标访问属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24138705/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com