0
我正在尝试实现一些网络代码,它将在端点获取json,然后将结果解析为CoreData对象。Swift 3 - 使用静态方法的协议,使用泛型类型的实例方法,可选的'.Type'参数
我定义了一个协议JSONParsable,我的一些CoreData对象类符合。
import SwiftyJSON
import CoreData
protocol JSONParsable {
// you validate the json response from the server to make sure it has everything you expect to function properly
static func validate(_ jsonResponse: JSON) throws
// now parse the jsonResponse
static func parseAll<T: NSManagedObject>(_ jsonResponse:JSON, into context:NSManagedObjectContext) -> [T]!
// describes how to parse one data object in a json response
static func parse<T: NSManagedObject>(_ jsonObject:JSON, into context:NSManagedObjectContext) -> T?
}
为什么?因为它们是该类型对象的实用方法。所以,我的网络客户端上的“GET对象”方法“经理人”基本上是这样的:
private func get<T:JSONParsable>(_ urlString: URLConvertible, expectedObjectType:T.Type?, completion: @escaping (_ success: Bool) -> Void)
的问题是,如果expectedObjectType是有史以来为零,编译器会抱怨有一个错误:
Generic parameter 'T' could not be inferred
我不知道如何解决这个问题。我想我在某个地方采取了错误的做法,仍然来自Objective-C世界。希望得到一些帮助,如果有必要,还会采取其他方法。
我基本上是说“让json访问特定的URL并使用特定的类扩展来解析它。”
我也想我可以实现'虚拟类'并提供这个?似乎有点肮脏,但不是我们不时有点脏吗? :)
实际上总是有一个*预期类型*,不是吗?那为什么它是可选的呢? – vadian
,因为有时候不需要解析。为了简洁,我没有公开整个API调用。完成块也通过json对象。 – horseshoe7