Swift4 Alamofire 网络请求实现同步化

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)

    }

信号量不能在主线程使用,并且会阻断主线程,使用时请慎重。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值