我想编写一个通用函数来解析结果,并在闭包的成功块中返回,或者在失败的块中发回错误。
我遇到这样的错误'无法推断出通用参数'T''。
这是我的示例代码。
let jsonString = """
{
"id": 1,
"msg": "Sample msg"
}
"""
struct Post: Codable {
var id: String?
var msg: String?
}
enum PostError: Error {
case empty
}
func fetch<T:Decodable>(_ completion: @escaping (Result<T?, PostError>) -> Void) {
do {
let data = Data(jsonString.utf8)
let post = try JSONDecoder().decode(T.self, from: data)
completion(.success(post))
}
catch {
completion(.failure(.empty))
}
}
fetch { res in
switch res {
case .success( let p):
print(p.description)
case .failure(let error):
print(error)
}
}
这是我遇到的错误。
您可以接受通用类型作为参数,例如:
func fetchObject<T:Decodable>(ofType type: T.Type, _ completion: @escaping (Result<T?, PostError>) -> Void) {
do {
let data = Data(jsonString.utf8)
let post = try JSONDecoder().decode(type, from: data)
completion(.success(post))
}
catch {
completion(.failure(.empty))
}
}