0
このエラーを解決するにはどうすればよいですか?Swift - ジェネリックを使用しているタイプの値を変換できません
型の値を変換できません '(ApiContainer、) - >()' 予想引数の型に「(ApiContainer <> ?,エラー?) - >()
サーバからのJSONレスポンス:
{
"meta": {
"sucess": "yes",
"value": "123"
},
"result": [
{
"name": "Name 1",
"postal_code": "PC1",
"city": "City 1",
"address": "01 Street"
},
{
"name": "Name 2",
"postal_code": "PC2",
"city": "City 2",
"address": "02 Street"
}
]
}
構造体
struct Client: Decodable {
let name: String
let postal_code: String
let city: String
}
struct Meta: Decodable {
let sucess: String
let value: String
}
struct ApiContainer<T: Decodable>: Decodable
let meta: Meta
let result: [T]
}
私は関数 'のgetAllの要求を行うと(Tは、例えば、クライアントのためにすることができApiContainer)特派構造体を返すことになっている必要があり
func getAll() {
makeRequest(endpoint: "http://blog.local:4711/api/all", completionHandler:
{(response: ApiContainer<Client>, error) in
if let error = error {
print("error calling POST on /todos")
print(error)
return
}
print(result)
//self.tableArray = decodedData.result
DispatchQueue.main.async {
self.tableView.reloadData()
}
})
}
機能getAll()からmakeRequestが呼び出されます
func makeRequest<T>(endpoint: String, completionHandler: @escaping (ApiContainer<T>?, Error?) ->()) {
guard let url = URL(string: endpoint) else {
print("Error: cannot create URL")
let error = BackendError.urlError(reason: "Could not create URL")
completionHandler(nil, error)
return
}
let urlRequest = URLRequest(url: url)
let session = URLSession.shared
let task = session.dataTask(with: urlRequest, completionHandler: {
(data, response, error) in
guard let responseData = data else {
print("Error: did not receive data")
completionHandler(nil, error)
return
}
guard error == nil else {
completionHandler(nil, error!)
return
}
do {
let response = try JSONDecoder().decode(ApiContainer<T>.self, from: responseData)
completionHandler(response, nil)
}
catch {
print("error trying to convert data to JSON")
print(error)
completionHandler(nil, error)
}
})
task.resume()
}
パーフェクト!出来た!ありがとうございました!! –