我需要扩展一个struct可用的初始化程序,抛出初始化程序调用该可用的初始化程序.我认为在Swift 3.1中没有优雅或明确的方法.
像这样的东西:
extension Product: JSONDecodable {
public enum Error: Swift.Error {
case unableToParseJSON
}
init(decodeFromJSON json: JSON) throws {
guard let jsonObject = json as? JSONObject else {
throw Error.unableToParseJSON
}
// Meta-code
self.init(dictionary: jsonObject) ?? throw Error.unableToParseJSON
}
}
Run Code Online (Sandbox Code Playgroud)
有一种优雅而干净的方式吗?
在写这个问题时找到了一个半干净的方法来做到这一点:
extension Product: JSONDecodable {
public enum Error: Swift.Error {
case unableToParseJSON
}
init(decodeFromJSON json: JSON) throws {
guard let jsonObject = json as? JSONObject,
let initialized = type(of: self).init(dictionary: jsonObject)
else {
throw Error.unableToParseJSON
}
self = initialized
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
414 次 |
| 最近记录: |