gpt4 book ai didi

ios - 如何使用委托(delegate)传递通用可解码数据

转载 作者:行者123 更新时间:2023-11-28 13:31:55 25 4
gpt4 key购买 nike

我已经成功地为我的应用创建了一个 APIClient 和路由器,这是我的代码

我的结果

enum Result<T> {
case success(data: T)
case failure(error: Error) }

这是我的服务器请求

func request<T: Decodable>(router: APIRouter, completion: @escaping (Result<T>) -> ()) {

和完成处理程序

completion(Result<T>.failure(error: ErrorResult.defaultError))
completion(Result.success(data: result))

这是我的 viewModel 我得到结果的地方

switch result {
case .success(let successData):
print("successData \(successData)")
self.viewModelDelegate?.didFinishFetchingData(successData)

case .failure(let errorData):
print("errorData \(errorData.localizedDescription)")
self.viewModelDelegate?.didFinishFetchingDataWithFailure?(errorData.localizedDescription)
}

现在我需要的是使用委托(delegate)将可解码的结果传递给我的 View Controller

@objc public protocol ViewModelDelegate {
func didStartFetchingData()
func didFinishFetchingData(_ result:Decodable)
@objc optional func didFinishFetchingDataWithFailure(_ message:String)
}

这是我做的,但是出现错误

我只需要使用自定义委托(delegate)将成功数据(可解码数据)从 View 模型传递到我的 View Controller

最佳答案

你可以用这个做通用的,看看下面的例子

 func didFinishFetchingData<T: Decodable>(_ result: T)

// example models
struct Foo: Decodable {

}
struct Boo: Decodable {

}
didFinishFetchingData(Foo())
didFinishFetchingData(Boo())

要根据需要使其可选,只需在 T 中添加 ? 即可。

func didFinishFetchingData<T: Decodable>(_ result: T?)

注意:您不能将纯 nil 传递到参数中,但可以传递可空类型的 T 检查下面的代码。

let model = try? JSONDecoder().decode(Foo.self, from: Data()) // model is type of Foo? 
didFinishFetchingData(model) // works fine

关于ios - 如何使用委托(delegate)传递通用可解码数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57230468/

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