Swift多線程之Operation(一)

自定義Operation子類:


Operation操作狀態(tài).png

代碼實(shí)現(xiàn):

private final class ImageDownloadOperation: Operation {
        
    let url: URL
        
    init(url: URL) {
        self.url = url
    }
    
    internal var _executing = false {
        willSet {
            willChangeValue(forKey: "isExecuting")
        }
        didSet {
            didChangeValue(forKey: "isExecting")
        }
    }
    
    override var isExecuting: Bool {
        return _executing
    }
    
    internal var _finished = false {
        willSet {
            willChangeValue(forKey: "isFinished")
        }
        didSet {
            didChangeValue(forKey: "isFinished")
        }
    }
    
    public override var isFinished: Bool {
        return _finished
    }
    
    override func start() {
        _executing = true
        
        URLSession.shared.dataTask(with: url) { [weak self] (data, response, error) in
            guard let welf = self else { return }
            
            guard !welf.isCancelled else {
                welf._executing = false
                welf._finished = true
                return
            }
            
            guard let data = data, let httpResponse = response as? HTTPURLResponse, error == nil else {
                welf._executing = false
                welf._finished = true
                return
            }
            
            guard httpResponse.statusCode == 200 else {
                welf._executing = false
                welf._finished = true
                return
            }
                        
            guard !welf.isCancelled else {
                welf._executing = false
                welf._finished = true
                return
            }
            
            //完成下載
            DispatchQueue.main.async {
                
            }
            
            //處理緩存
            
            welf._executing = false
            welf._finished = true
        }.resume()
    }
}

定義_executing,_finished的原因是因?yàn)樗鼈冎挥袑?yīng)的get方法:


Operation.png

參考資料

· Swift多線程之Operation:異步加載CollectionView圖片

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容