【发布时间】:2018-12-22 21:11:21
【问题描述】:
我有例如可编码结构User:
struct User: Codable {
// ...
var psnTag: String?
var xblTag: String?
var steamTag: String?
var nintendoTag: String?
var instagramId: String?
// ...
}
stringKey 为String = "psnTag"
如何通过 stringKey 从实例中获取值?
像这样:
let stringKey = "psnTag"
user.hasKeyForPath(stringKey) //return Bool
user.valueForPath(stringKey) //return AnyObject
【问题讨论】:
-
字符串键路径是 objective-c-ish 并且容易出错。如果 user.hasKeyForPath,您(开发人员)应该在 design 时知道。这是另一个相当昂贵的不必要的运行时检查。这是斯威夫特。 注意类型。使用原生 Swift
Keypath例如let keyPath = \User.psnTag -
stackoverflow.com/a/46597941/2303865 如果您想在该帖子中添加扩展后为任何 Codable 结构实现这些方法
extension Encodable { func hasKey(for path: String) -> Bool { return self[path] != nil } func value(for path: String) -> Any? { return self[path] } }