如何枚举Swift中的ALAssetsGroup

Alv*_*ese 3 ios swift

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

 photoLibrary.enumerateGroupsWithTypes(ALAssetsGroupType(ALAssetsGroupSavedPhotos), usingBlock: { group  in
        if group != nil

        {

        }

        }, failureBlock: { error in println("\(error)")})
Run Code Online (Sandbox Code Playgroud)

如何添加这行代码.

group enumerateAssetsUsingBlock:groupEnumerAtion
Run Code Online (Sandbox Code Playgroud)

我尝试添加它但它没有显示任何enumerateAssetsUsingBlock属性.?

这是实际的代码.!在Objective-C中

    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];
            }
        });
Run Code Online (Sandbox Code Playgroud)

Mar*_*n R 8

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

typealias ALAssetsLibraryGroupsEnumerationResultsBlock = (ALAssetsGroup!, UnsafeMutablePointer<ObjCBool>) -> Void
Run Code Online (Sandbox Code Playgroud)

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

{
     (group: ALAssetsGroup!, stop: UnsafeMutablePointer<ObjCBool>) -> Void in
     // ...
}
Run Code Online (Sandbox Code Playgroud)

所以你的代码应该是这样的:

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)")
    })
Run Code Online (Sandbox Code Playgroud)

由于Swift的"自动类型推断"功能,你可以这样写

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)")
    })
Run Code Online (Sandbox Code Playgroud)

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