【发布时间】:2018-04-25 19:19:06
【问题描述】:
我是 swift 新手,正在尝试做类似的事情:
我有一个名为 Api Response 的结构:
struct ApiResponse {
var IsSuccess : Bool = false
var Message : String?
var ReturnedData : Data?
}
在另一个名为 CommonHandler 的类中有一个函数,可以调用 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 解析为 struct。 在这种情况下最好的方法是什么? 谢谢
【问题讨论】:
标签: swift nsurlsession