【问题标题】:iOS - Best practice to get async properties of collection in SwiftiOS - 在 Swift 中获取集合的异步属性的最佳实践
【发布时间】:2016-07-26 08:53:45
【问题描述】:

在 Swift 中使用 PHAsset 时,我遇到了一个常见问题,必须有一个好的设计/解决方案。例如,我有一个PHAsset 的集合,比如说assetCollection。现在我想得到assetCollection 的总大小,这是其中所有资产的总和。

我知道有一个异步 API 可以获取单个资产大小 https://stackoverflow.com/a/26551990/1084174(在 Objective-c 中),

[[PHImageManager defaultManager] requestImageDataForAsset:asset options:nil resultHandler:^(NSData *imageData, NSString *dataUTI, UIImageOrientation orientation, NSDictionary *info) {
        float imageSize = imageData.length;
        //convert to Megabytes
        imageSize = imageSize/(1024*1024);
        NSLog(@"%f",imageSize);
 }];

但是当它是一个集合时,我该如何设计解决方案?

我的想法是,我可以在循环内为assetCollection 中的每个资产运行异步调用,将total 变量中的大小相加,直到我得到最后一个结果(可能正在使用全局变量)。 total 将是最终的集合大小。但我认为对于这样的常见问题必须有一些更好的设计/解决方案。

如果有人建议,将不胜感激。

【问题讨论】:

    标签: ios swift asynchronous collections phasset


    【解决方案1】:

    花费数周后,我找到了更好的解决方案。我正在分享我的解决方案,但仍然可能有一些更好的设计。如果你变得更好,请分享。

    解决方案

    我创建了一个包装器集合,假设sizedAssetCollection 带有一个名为size 的属性。我还实现了add()remove() 方法。当我通过我的添加/删除方法添加或删除一个项目时,我会计算更新size。喜欢,

    void add (PHAsset *asset) {
    [[PHImageManager defaultManager] requestImageDataForAsset:asset options:nil resultHandler:^(NSData *imageData, NSString *dataUTI, UIImageOrientation orientation, NSDictionary *info) {
            float imageSize = imageData.length;
            imageSize = imageSize/(1024*1024);
            size += imageSize;
     }];
    }
    
    
    void remove(PHAsset *asset) {
    [[PHImageManager defaultManager] requestImageDataForAsset:asset options:nil resultHandler:^(NSData *imageData, NSString *dataUTI, UIImageOrientation orientation, NSDictionary *info) {
            float imageSize = imageData.length;
            imageSize = imageSize/(1024*1024);
            size -= imageSize;
     }];
    }
    

    最后我在size 变量中得到了预期的结果。

    【讨论】:

      猜你喜欢
      • 2018-03-17
      • 2016-09-03
      • 2013-01-26
      • 1970-01-01
      • 1970-01-01
      • 2010-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多