gpt4 book ai didi

swift - 如何从包含 DataTask 的方法返回对象

转载 作者:行者123 更新时间:2023-11-28 12:14:27 25 4
gpt4 key购买 nike

<分区>

我是 swift 的新手,正在尝试做类似的事情:

我有一个名为 Api Response 的结构:

struct ApiResponse {
var IsSuccess : Bool = false
var Message : String?
var ReturnedData : Data?
}

并且在另一个名为 CommonHandler 的类中有一个 func,它调用 api

public class CommonHandler {

public func CallApi(_ apiUrl : String , _ parameters : [String : Any] ) -> ApiResponse
{
var apiResponse = ApiResponse()

let url = URL(string: apiUrl)!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = try! JSONSerialization.data(withJSONObject: parameters, options: .prettyPrinted)

let task = URLSession.shared.dataTask(with: request , completionHandler : { data, response, error in
if let error = error {
// handle the transport error
return
}
guard let response = response as? HTTPURLResponse, response.statusCode == 200 else {
// handle the server error
return
}
apiResponse.ReturnedData = data
apiResponse.IsSuccess = true
apiResponse.Message = "Succeed"

})
task.resume()

return apiResponse
}
}

我想在 UIViewController 中调用这个函数:

var handler = CommonHandler()
let param :[String : String] = ["param":"param"]
let url = "url"

let response = handler.CallApi(url, param)
print(response.IsSuccess)
print(response.Message!)

我知道我不能像这样使用 dataTask 方法。它是异步的。但是我如何在非 void func 中调用 api 并返回其响应数据?然后我将 ReturnedData json 解析为结构。在这种情况下最好的方法是什么?谢谢

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