提问人:Morniak 提问时间:7/9/2014 更新时间:9/17/2014 访问量:2338
ALAssetsLibrary.enumerateGroupsWithTypes Swift 中的第一个参数
ALAssetsLibrary.enumerateGroupsWithTypes first parameter in Swift
问:
我尝试使用类的方法,但第一个参数出现错误。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)
结果是运行时错误和 XCode 崩溃。EXC_BAD_ACCESS
答:
-1赞
gotnull
7/10/2014
#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, )
这可能是一个错误,就像 Jack Wu 提到他们可能在哪里使用而不是使用并且翻译器坏了一样。enum
NS_ENUM
目前,这样做可能是一种解决方法。
资产类型
用于标识资产类型的常量。
enum {
ALAssetsGroupLibrary = (1 << 0),
ALAssetsGroupAlbum = (1 << 1),
ALAssetsGroupEvent = (1 << 2),
ALAssetsGroupFaces = (1 << 3),
ALAssetsGroupSavedPhotos = (1 << 4),
ALAssetsGroupPhotoStream = (1 << 5),
ALAssetsGroupAll = 0xFFFFFFFF,
};
评论
0赞
Morniak
7/10/2014
ALAssetsGroupType.allZeros
return 而我要使用的选项的值是 。因此,它会编译但不产生预期的结果(未设置任何位,因此结果将始终为空数组)。0x00000
0xFFFFFF
0赞
gotnull
7/11/2014
@Morniak 请参阅我更新的答案。你有没有试过作为?0xFFFFFFFF
ALAssetsGroupType
0赞
Morniak
7/11/2014
是的,它有效,这就是我正在做的事情,但这不是一个可行的解决方案。 是一个神奇的数字,如果由于任何原因 Apple 更改此枚举的值,我的应用程序将被破坏。0xFFFFFFFF
0赞
gotnull
7/14/2014
@Morniak:是的,没错。这就是为什么我提到这样做暂时可能是一种解决方法。
1赞
Mike Akers
9/17/2014
#2
看起来正确的方法是使用 的初始化器创建一个新的 .以下方法应该有效:ALAssetsGroupType
ALAssetsGroupType
assetLib.enumerateGroupsWithTypes(ALAssetsGroupType(ALAssetsGroupAll), usingBlock: success, failureBlock: fail)
上一个:Swift 中的嵌套递归函数
评论
ALAssetsGroup.All
.All
var ALAssetsGroupAll: CUnsignedInt { get }
typealias ALAssetsGroupType = Int
enum
NS_ENUM