簡體   English   中英

轉義閉包捕獲非轉義參數“完成”(Swift 5)

[英]Escaping closure captures non-escaping parameter 'completion' (Swift 5)

在我的項目中,我遇到了需要使用后台隊列來創建 AVPlayerItem(我在setupTrackModels函數中創建)的情況。 我想在getTracks函數中執行此操作,並且此方法還必須有一個我需要在主線程中調用的完成處理程序,但我無法以任何方式使它們成為朋友。 我收到編譯器錯誤: Escaping closure captures non-escaping parameter 'completion'也許有人可以告訴我如何做到這一點或展示另一種方式。

我想做這樣的事情:

var content: [URL] = []
var tracks: [TrackModelProtocol] = []

private func getTracks(completion: () -> ()) {
    DispatchQueue.global(qos: .background).async { //Error: Escaping closure captures non-escaping parameter 'completion'
        self.tracks = self.setupTrackModels(content: self.content)
        
        DispatchQueue.main.async { //Error: Escaping closure captures non-escaping parameter 'completion'
            completion()
        }
    }
}

然后我想使用這樣的功能:

getTracks {
   tableView.reloadData()
   //or something else
}

我不想在 DispatchQueue.main 中使用tableView.reloadData() 塊,因為我多次調用getTracks並且我想在它的完成塊中實現不同的邏輯

使用@escaping

private func getTracks(completion:@escaping () -> ())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM