首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Swift中枚举ALAssetsGroup

如何在Swift中枚举ALAssetsGroup
EN

Stack Overflow用户
提问于 2014-07-26 08:14:43
回答 2查看 2.2K关注 0票数 3

我尽力了,但我被困在这里了。我想从iPhone相机相册中导入所有的照片。所以我想出了这个ALAssestsLibrary API。

代码语言:javascript
复制
 photoLibrary.enumerateGroupsWithTypes(ALAssetsGroupType(ALAssetsGroupSavedPhotos), usingBlock: { group  in
        if group != nil

        {

        }

        }, failureBlock: { error in println("\(error)")})

如何添加这一行代码。

代码语言:javascript
复制
group enumerateAssetsUsingBlock:groupEnumerAtion

我试过添加这个,但它没有显示任何enumerateAssetsUsingBlock属性。?

这是真正的代码。!!目标-C

代码语言:javascript
复制
    dispatch_async(dispatch_get_main_queue(), ^
        {
            @autoreleasepool
            {
                ALAssetsLibraryAccessFailureBlock failureblock = ^(NSError *myerror)
                    {
                        NSLog(@"error occour =%@", [myerror localizedDescription]);
                };

                ALAssetsGroupEnumerationResultsBlock groupEnumerAtion = ^(ALAsset *result, NSUInteger index, BOOL *stop)
                    {
                        if (result!=NULL)
                        {
                            if ([[result valueForProperty:ALAssetPropertyType] isEqualToString:ALAssetTypePhoto])
                            {
                                [self.g_imageArray addObject:result];
                            }
                        }
                };

                ALAssetsLibraryGroupsEnumerationResultsBlock
                libraryGroupsEnumeration = ^(ALAssetsGroup* group, BOOL* stop)
                    {
                        if (group == nil)
                        {
                            return;
                        }

                        if (group!=nil) {
                            [group enumerateAssetsUsingBlock:groupEnumerAtion];
                        }
                        [self updatephotoList];
                };

                self.library = [[ALAssetsLibrary alloc] init];
                [self.library enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos
                usingBlock:libraryGroupsEnumeration 
                failureBlock:failureblock];
            }
        });
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-26 09:02:21

您的enumerationBlockfailureBlock没有正确的类型。例如,枚举块定义为

代码语言:javascript
复制
typealias ALAssetsLibraryGroupsEnumerationResultsBlock = (ALAssetsGroup!, UnsafeMutablePointer<ObjCBool>) -> Void

这意味着参数是一个闭包,以(ALAssetsGroup!, UnsafeMutablePointer<ObjCBool>)作为参数并返回Void

代码语言:javascript
复制
{
     (group: ALAssetsGroup!, stop: UnsafeMutablePointer<ObjCBool>) -> Void in
     // ...
}

所以您的代码应该如下所示:

代码语言:javascript
复制
photoLibrary.enumerateGroupsWithTypes(ALAssetsGroupType(ALAssetsGroupSavedPhotos),
    usingBlock: {
        (group: ALAssetsGroup!, stop: UnsafeMutablePointer<ObjCBool>) -> Void in
        if group != nil {
            group.enumerateAssetsUsingBlock({
                (asset: ALAsset!, index: Int, stop: UnsafeMutablePointer<ObjCBool>) -> Void in
                    // ...
                })
        }
    },
    failureBlock: {
        (myerror: NSError!) -> Void in
        println("error occurred: \(myerror.localizedDescription)")
    })

由于Swift的“自动类型推理”功能,您也可以这样写

代码语言:javascript
复制
photoLibrary.enumerateGroupsWithTypes(ALAssetsGroupType(ALAssetsGroupSavedPhotos),
    usingBlock: {
        group, stop in
        if group != nil {
            group.enumerateAssetsUsingBlock({
                asset, index, stop in
                // ...
                })
        }
    },
    failureBlock: {
        myerror in
        println("error occurred: \(myerror.localizedDescription)")
    })

但在这种情况下,第一个版本可能更容易理解。

票数 8
EN

Stack Overflow用户

发布于 2020-08-19 09:20:33

注意,自iOS 9.0以来,就不再推荐该API了:

Swift 5

代码语言:javascript
复制
    let library = ALAssetsLibrary()
    library.enumerateGroups(withTypes: ALAssetsGroupType(ALAssetsGroupSavedPhotos), using: { (group, stop) -> Void in
        if let group = group {
            group.enumerateAssets({
                (asset, index, stop) -> Void in
                // ...
            })
        }
    },
    failureBlock: { myerror in
        print("error occurred: \(myerror)")
    })
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24968996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档