ALAssetsLibrary.enumerateGroupsWithTypes Swift中的第一个参数

时间:2014-07-09 13:33:39

标签: ios swift alassetslibrary

我尝试使用enumerateGroupsWithTypes类的ALAssetsLibrary方法,但第一个参数出错。

该方法的原型:

func enumerateGroupsWithTypes(types: ALAssetsGroupType,
    usingBlock enumerationBlock: ALAssetsLibraryGroupsEnumerationResultsBlock!,
    failureBlock: ALAssetsLibraryAccessFailureBlock!)

我如何称呼此方法:

assetLib.enumerateGroupsWithTypes(ALAssetsGroupAll, usingBlock: success, failureBlock: fail)

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

其他测试:

基于我在互联网和我自己的测试中发现的内容,我也尝试了

测试1

assetLib.enumerateGroupsWithTypes(ALAssetsGroupAll as ALAssetsGroupType, usingBlock: success, failureBlock: fail)

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

测试2

assetLib.enumerateGroupsWithTypes(ALAssetsGroupType(ALAssetsGroupAll), usingBlock: success, failureBlock: fail)

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

2 个答案:

答案 0 :(得分:1)

看起来正确的方法是使用ALAssetsGroupType的初始值设定项来创建新的ALAssetsGroupType。以下应该有效:

assetLib.enumerateGroupsWithTypes(ALAssetsGroupType(ALAssetsGroupAll), usingBlock: success, failureBlock: fail)

答案 1 :(得分:-1)

这似乎是编译:

虽然,它未经测试,因为我不确切知道它返回allZeros的内容。

它可能会返回0x00000而不是您需要的0xFFFFFF

将来可能仍然是一个很好的参考。

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

修改

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

assetLib.enumerateGroupsWithTypes(0xFFFFFFFF, usingBlock: ...)

我得到以下内容:

(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, )

这可能是像杰克吴所提到的那样,他们可能会使用enum而不是NS_ENUM并且翻译人员破了。

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

  

资产类型

     

识别资产类型的常量。

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