这是问题的扩展:creating-a-function-on-a-parent-class-that-can-be-accessible-to-all-its-children
有人建议使用协议(protocol)而不是为函数使用类会更好。尝试协议(protocol)方法后,发生错误“无法实例化协议(protocol)类型‘JSONObject’”。感谢您提供修复此错误的任何帮助。这是协议(protocol):
protocol JSONObject: class, NSObjectProtocol {
init(resultsDictionary: [String:Any])
}
extension JSONObject {
static func updateResultsDictionary(urlExtension: String, completion:
@escaping (JSONObject?) -> Void) {
let nm = NetworkManager.sharedManager
_ = nm.getJSONData(urlExtension: urlExtension) {data in
guard let jsonDictionary = nm.parseJSONFromData(data),
let resultDictionaries = jsonDictionary["result"] as? [[String : Any]] else {
completion(nil)
return
}
for resultsDictionary in resultDictionaries {
let jsonInfo = JSONObject(resultsDictionary: resultsDictionary)// Error haapens here
completion(jsonInfo)
}
}
}
}
最佳答案
像这样使用 Self
:
static func updateResultsDictionary(urlExtension: String, completion:
@escaping (Self?) -> Void) {
let jsonInfo = self.init(resultsDictionary: [:])
completion(jsonInfo)
}
因为你不能初始化一些protocol
,但是你可以初始化符合protocol
的Type
。
Self
是指 Type
而不是 protocol
。
这是一个关于 Protocol-Oriented Programming in Networking 的教程这将帮助您设计网络架构。
关于ios - "Protocol type ' ' cannot be instantiated"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41646070/