使用结构回调的最佳实践?

时间:2018-03-07 22:06:37

标签: ios swift struct callback

我想在一个结构上使用回调,该结构因错误而失败'闭包不能隐含地捕获行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

注意:我真的不想使用委托模式,因为我认为它增加了太多的开销。

0 个答案:

没有答案