ALAssetsLibrary.enumerateGroupsWithTypes Swift中的第一个参数

Mor*_*iak 7 ios alassetslibrary swift

我尝试使用类的enumerateGroupsWithTypes方法,ALAssetsLibrary但我得到第一个参数的错误.

该方法的原型:

func enumerateGroupsWithTypes(types: ALAssetsGroupType,
    usingBlock enumerationBlock: ALAssetsLibraryGroupsEnumerationResultsBlock!,
    failureBlock: ALAssetsLibraryAccessFailureBlock!)
Run Code Online (Sandbox Code Playgroud)

我怎么称呼这种方法:

assetLib.enumerateGroupsWithTypes(ALAssetsGroupAll, usingBlock: success, failureBlock: fail)
Run Code Online (Sandbox Code Playgroud)

但是我收到编译错误 'CUnsignedInt' is not convertible to 'ALAssetsGroupType'

其他测试:

基于我在互联网上发现的和我自己的测试,我也尝试过

测试1

assetLib.enumerateGroupsWithTypes(ALAssetsGroupAll as ALAssetsGroupType, usingBlock: success, failureBlock: fail)
Run Code Online (Sandbox Code Playgroud)

结果是编译错误 Cannot convert the expression's type 'Void' to type 'ALAssetsGroupType'

测试2

assetLib.enumerateGroupsWithTypes(ALAssetsGroupType(ALAssetsGroupAll), usingBlock: success, failureBlock: fail)
Run Code Online (Sandbox Code Playgroud)

结果是运行时错误EXC_BAD_ACCESS和XCode崩溃.

fuz*_*uzz -1

这似乎可以编译:

尽管如此,它还没有经过测试,因为我不知道它到底返回什么allZeros

它可能会返回0x00000与您需要的相反的内容,即0xFFFFFF.

对于未来的人们来说仍然是一个很好的参考。

let assetLib = ALAssetsLibrary()
assetLib.enumerateGroupsWithTypes(ALAssetsGroupType.allZeros, usingBlock: { (results, stop) in
    println(results)
}, failureBlock: { (fail) in
    println(fail)
})
Run Code Online (Sandbox Code Playgroud)

编辑:

那么,如果您执行以下操作会发生什么?

assetLib.enumerateGroupsWithTypes(0xFFFFFFFF, usingBlock: ...)
Run Code Online (Sandbox Code Playgroud)

我得到以下信息:

(ALAssetsGroup - Name:Instagram, Type:Album, Assets count:46, )
(ALAssetsGroup - Name:Snapchat, Type:Album, Assets count:0, )
(ALAssetsGroup - Name:Camera Roll, Type:Saved Photos, Assets count:681, )
(nil, )
Run Code Online (Sandbox Code Playgroud)

这可能是一个像吴杰克提到的错误,他们可能使用过enum,但没有使用过NS_ENUM,并且翻译器坏了。

这样做可能是暂时的解决方法。

资产类型

用于识别资产类型的常量。

enum {
   ALAssetsGroupLibrary        = (1 << 0),
   ALAssetsGroupAlbum          = (1 << 1),
   ALAssetsGroupEvent          = (1 << 2),
   ALAssetsGroupFaces          = (1 << 3),
   ALAssetsGroupSavedPhotos    = (1 << 4),
   ALAssetsGroupPhotoStream    = (1 << 5),
   ALAssetsGroupAll            = 0xFFFFFFFF,
};
Run Code Online (Sandbox Code Playgroud)