EvG*_*yin 1 key-value-coding swift
例如,我有可编码的结构User:
struct User: Codable {
// ...
var psnTag: String?
var xblTag: String?
var steamTag: String?
var nintendoTag: String?
var instagramId: String?
// ...
}
Run Code Online (Sandbox Code Playgroud)
和 stringKey as String= "psnTag"
如何通过 stringKey 从实例中获取值?
像这样:
let stringKey = "psnTag"
user.hasKeyForPath(stringKey) //return Bool
user.valueForPath(stringKey) //return AnyObject
Run Code Online (Sandbox Code Playgroud)
从扩展Encodable协议开始并声明方法 forhasKey和 forvalue
extension Encodable {
func hasKey(for path: String) -> Bool {
return Mirror(reflecting: self).children.contains { $0.label == path }
}
func value(for path: String) -> Any? {
return Mirror(reflecting: self).children.first { $0.label == path }?.value
}
}
Run Code Online (Sandbox Code Playgroud)
extension Encodable {
func hasKey(for path: String) -> Bool {
return dictionary?[path] != nil
}
func value(for path: String) -> Any? {
return dictionary?[path]
}
var dictionary: [String: Any]? {
return (try? JSONSerialization.jsonObject(with: JSONEncoder().encode(self))) as? [String: Any]
}
}
Run Code Online (Sandbox Code Playgroud)
现在你可以像这样使用它:
.hasKey(for: "key") //returns Bool
.value(for: "key") //returns Any?
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1401 次 |
| 最近记录: |