gpt4 book ai didi

ios - 如何将数据从异步任务传递到 View Controller ?

转载 作者:搜寻专家 更新时间:2023-11-01 06:33:38 27 4
gpt4 key购买 nike

总结

我在异步任务中使用用户的登录用户名和密码查询用户的 API。我找到了一种方法:

  1. 在与我的 UIViewController 相同的文件中创建一个协议(protocol)委托(delegate)。
  2. 使协议(protocol)委托(delegate)成为 UIViewController 的成员。
  3. 创建用于执行异步的 API 类。任务。
  4. 定义 UIViewController 的委托(delegate)成员变量的完成处理函数。
  5. 将 URL、委托(delegate)、参数等传递给 API 类。
  6. 执行异步。 API 类中的任务。
  7. 一旦异步。任务完成,完成处理程序在原始 View Controller 中执行。

API 文件

class API {
var delegate: APIDelegate?
required init(providedDelegate: APIDelegate){
delegate = providedDelegate
}
func getPOSTData(){
API.request(URL, method: .post).responseJSON
{ response in
if response.result.value != nil {
//print("JSON: \(JSON)")
self.delegate?.onSuccess(jsonData: JSON as! [String : Any])
} else {
self.delegate?.onFailure(error: "No JSON Data")
}
}
}
}

查看 Controller 文件

protocol APIDelegate{
func onSuccess(jsonData: [String:Any])
func onFailure(error: Any)
}
UIViewControllerName : UIViewController, APIDelegate{
var delegate: APIDelegate?

func testAPICall(sender: UIButton){
let client = API(providedDelegate: delegate!)
client.getPOSTData()
}

func onSuccess(jsonData: [String:Any]) {
print("JSON: \(jsonData)")
}
func onFailure(error: Any) {
print(error)
}

}

问题

从长远来看,这会导致问题吗?有没有更好的方法在从另一个类备份到调用 UIViewController 的异步任务之间共享数据?

最佳答案

基本上您的代码应该可以工作,但是我强烈建议您使用回调闭包而不是协议(protocol)/委托(delegate)。

该代码使用枚举来返回单个值,并使用 switch 语句来处理调用方的情况:

enum APIResult {
case success([String:Any])
case failure(Any)
}

class UIViewControllerName : UIViewController {

func testAPICall(sender: UIButton) {

let client = API()
client.getPOSTData() { result in
switch result {
case .success(let jsonData) : print("JSON: \(jsonData)")
case .failure(let error) : print("JSON: \(error)")
}
}
}
}


class API {

func getPOSTData(completion: (APIResult)->() ) {
API.request(URL, method: .post).responseJSON
{ response in
if response.result.value != nil {
//print("JSON: \(JSON)")
completion(.success(JSON as! [String : Any]))
} else {
completion(.failure("No JSON Data"))
}
}
}
}

关于ios - 如何将数据从异步任务传递到 View Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44346538/

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