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