java 1%3c%3c24=_DispatchQueue不等待异步函数完成

我正在尝试创建一个使用USPS API来获取数据的简单包跟踪应用程序 . callRestService方法成功提取数据,其完成处理程序serviceCallback(设置unparsedXml属性)有效 . 但是,我调用callRestService的方法不会等待它,它的完成处理程序在继续之前完成,导致我的print(unparsedXml)语句返回nil .

如下所示,我尝试使用DispatchGroup对象和DispatchQueue使函数等待callRestService的完成,但无论如何都会继续 . 如何让函数等待调用完成?

var unparsedXml:String?

public func getTrackingInfo(_ trackingNumber: String) -> TrackingInfo {

let group = DispatchGroup()

group.enter()

DispatchQueue.global(qos: DispatchQoS.default.qosClass).async {

self.callRestService(requestUrl: self.getRequest(trackingNumber))

group.leave()

}

group.wait()

print(unparsedXml)

return TrackingInfo()

}

private func getRequest(_ trackingNumber: String) -> String {

let APIUsername = "Intentionally Omitted"

let trackingXmlLink = "http://production.shippingapis.com/ShippingAPI.dll?API=TrackV2&XML=%3CTrackFieldRequest%20USERID=%22" + APIUsername + "%22%3E%20%3CRevision%3E1%3C/Revision%3E%20%3CClientIp%3E127.0.0.1%3C/ClientIp%3E%20%3CSourceId%3EFaiz%20Surani%3C/SourceId%3E%20%3CTrackID%20ID=%22" + trackingNumber + "%22%3E%20%3CDestinationZipCode%3E66666%3C/DestinationZipCode%3E%20%3CMailingDate%3E2010-01-01%3C/MailingDate%3E%20%3C/TrackID%3E%20%3C/TrackFieldRequest%3E"

return trackingXmlLink

}

public func callRestService(requestUrl:String) ->Void

{

var request = URLRequest(url: URL(string: requestUrl)!)

request.httpMethod = "GET"

let session = URLSession.shared

let task = session.dataTask(with: request, completionHandler: serviceCallback)

task.resume()

}

private func serviceCallback(data:Data? , response:URLResponse? , error:Error? ) -> Void

{

unparsedXml = String(data: data!, encoding: .utf8)

//print(unparsedXml) Works correctly when uncommented

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值