我已经尽力了,但是我还是被困在这里了。我想导入iPhone相机相册中的所有照片。所以我想出了这个alassstlibrary API
photoLibrary.enumerateGroupsWithTypes(ALAssetsGroupType(ALAssetsGroupSavedPhotos), usingBlock: { group in
if group != nil
{
}
}, failureBlock: { error in println("(error)")})
如何添加这行代码
group enumerateAssetsUsingBlock:groupEnumerAtion
我试着添加这个,但它没有显示任何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];
}
});
您的enumerationBlock
和failureBlock
没有正确的类型。例如,枚举块定义为
typealias ALAssetsLibraryGroupsEnumerationResultsBlock = (ALAssetsGroup!, UnsafeMutablePointer<ObjCBool>) -> Void
表示参数是一个以(ALAssetsGroup!, UnsafeMutablePointer<ObjCBool>)
为形参并返回Void
的闭包:
{
(group: ALAssetsGroup!, stop: UnsafeMutablePointer<ObjCBool>) -> Void in
// ...
}
所以你的代码应该是这样的:
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的"自动类型推断"特性,你也可以这样写
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)")
})
但是在这种情况下,第一个版本可能更容易理解
注意,该API自iOS 9.0以来已弃用:
迅速5
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)")
})