gpt4 book ai didi

ios - 在 Swift 中发起异步 GET/POST 请求

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

我已经为发出 GET 请求编写了这个类

    class GETReq{
func HTTPsendRequest(request: NSMutableURLRequest, callback: (String, String?) -> Void) {
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { (data, response, error) -> Void in

dispatch_async(dispatch_get_main_queue()) {
if (error != nil) {
callback("", error.localizedDescription)
} else {
callback(NSString(data: data,encoding: NSUTF8StringEncoding)!, nil)
}
}
}
task.resume()
}

func HTTPGet(url: String, callback: (String, String?) -> Void) {
var request = NSMutableURLRequest(URL: NSURL(string: url)!)
HTTPsendRequest(request, callback) }
}

在另一个名为“ManageData”的类中

class ManageData{

func makeTheRequest()->String{
var makeReq:GETReq=GETReq();
var ret:String="";

makeReq.HTTPGet("http://www.example.com/fileExample.php") { (data:String, error:String?) -> Void in
if(error==nil){ ret="error"; } else { ret="ok"; }
}
return ret;
}
}

问题是在 ViewController 类中 make

 var result:String =  manageData.makeTheRequest();

“result”变量始终为空,因为 makeTheRequest 函数在完成 get 请求之前返回“ret”。

最佳答案

您应该让 makeTheRequest 采用您在其他地方使用的相同完成闭包模式。因此,将 makeTheRequest 更改为不返回任何值,而是采用一个 callback 参数,该参数是一个将在请求完成时调用的闭包:

func makeTheRequest(callback: (String, String?) -> Void) {
var makeReq:GETReq=GETReq();
var ret:String="";

makeReq.HTTPGet("http://www.example.com/fileExample.php", callback)
}

你大概会这样调用它:

makeTheRequest() { string, error in 
if error != nil {
println(error)
return
}

// if you got here, you can use `string`

println(string)
}

关于ios - 在 Swift 中发起异步 GET/POST 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27048144/

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