我想在一个结构上使用回调,该结构因错误而失败'闭包不能隐含地捕获行self.pictures = catPictures
上的变异自我参数
我如何理解与结构有关的是值类型,并且包含它的副本的闭包不是很安全。
用法类似于以下内容:
final class APIService {
static func loadFunnyCatPicturesAsync(completion: @escaping ([UIImage]) -> () ) {
DispatchQueue.main.async {
// Do a lot of fancy stuff here
let decodedImages = [UIImage()]
// DispatchQueue.main.async or .sync? - I'm not sure about that :|
DispatchQueue.main.async {
completion(decodedImages)
}
}
}
}
struct viewModel {
var pictures: [UIImage] {
didSet {
// Do synchronous stuff here again
}
}
mutating func loadPicture() {
APIService.loadCatPicturesAsync { (catPictures) in
self.pictures = catPictures
}
}
}
所以我应该让viewModel
成为一个类,还是有一个很好的方法来使用结构。
当我进行回调时,我应该使用DispatchQueue.main.async
或.sync
注意:我真的不想使用委托模式,因为我认为它增加了太多的开销。