我如何在通用函数中使用swift通用Decodable协议

问题描述 投票:0回答:1

我想编写一个通用函数来解析结果,并在闭包的成功块中返回,或者在失败的块中发回错误。

我遇到这样的错误'无法推断出通用参数'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)
        }
    }

这是我遇到的错误。

I'm getting error like this.

ios swift swift3
1个回答
0
投票

您可以接受通用类型作为参数,例如:

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))
   }
}
© www.soinside.com 2019 - 2024. All rights reserved.