gpt4 book ai didi

ios - 如何在泛型函数中使用 swift 泛型可解码协议(protocol)

转载 作者:行者123 更新时间:2023-12-01 21:59:19 25 4
gpt4 key购买 nike

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

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

最佳答案

您可以接受泛型类型作为参数,如下所示:

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))
}
}

用法:
fetchObject(ofType: Post.self) { res in
switch res {
case .success(let post):
print(post.description)
case .failure(let error):
print(error)
}
}

关于ios - 如何在泛型函数中使用 swift 泛型可解码协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60543141/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com