好吧,用Swift 4編寫一些網絡代碼並用它們新的可解碼協議來修補。下面的錯誤不與幾個編譯器錯誤:聲明一個符合協議的泛型類型的常量
// A lot has been stripped out of this for brevity, so we can focus on this specific constant
struct APIRequest {
let decoder = JSONDecoder()
let decodableType: <T.Type where T : Decodable> // Compiler errors here
// This function compiles and runs successfully when I pass it in explicitly (by removing the above constant)
func decodeJsonData<T>(_ data: Data, for type: T.Type) throws -> T where T : Decodable {
return try decoder.decode(type, from: data)
}
}
的decodableType應該是所述任何結構/類符合可解碼協議的「類型」(即User.self其中User符合可解碼或可編碼) 。我如何告訴編譯器呢?
編輯:換一種方式,我想寫出這樣的代碼...
struct APIRequest {
let decoder = JSONDecoder()
let decodableType: <T.Type where T : Decodable> // Not sure how to declare this type
func decodeJsonData(_ data: Data,) throws -> Decodable {
return try decoder.decode(decodableType, from: data)
}
}
這意味着保持從第一個代碼塊中的泛型參數恆定的內部的結構。我只是不知道如何在Swift中正確寫出類型。
? – Alexander
正確...通過'第一代碼塊'我的意思是這個頁面上的第一個灰色代碼區域。第一個代碼塊中的泛型參數是傳入的'for type'參數。 – Msencenb