Alamofire 所有的请求都是异步,由于业务原因,需要实现同步化,找了n多个资料,无非就是在线程上做手脚, 我看大多数都是使用的信号量进行拦截线程的。我是添加的responseJSONSync 方法同步进行获取数据的。啥都不说了,盘就是了:
//同步获取JSON数据
public func responseJSONSync(queue: DispatchQueue? = nil,
options: JSONSerialization.ReadingOptions = .allowFragments,
completionHandler: @escaping (DataResponse<Any>) -> Void) {
let semaphone = DispatchSemaphore(value: 0)
var result : DataResponse<Any>!
//创建个异步线程
response(queue: DispatchQueue.global(qos: .default), responseSerializer: JSONResponseSerializer(options: options), completionHandler: { (response) in
result = response
completionHandler(result)
semaphone.signal()
})
_ = semaphone.wait(timeout: .distantFuture)
}
信号量不能在主线程使用,并且会阻断主线程,使用时请慎重。