enumerateGroupsWithTypes 循环没有停止
enumerateGroupsWithTypes loop isn't stopping
我正在使用以下代码遍历 eh 相册,如果它找到我需要的那个,它应该停止进一步循环。
public func importPhotosFromGallery(albumName: String = "Last Imported") {
fetchAlbum(albumName) { album, error in
if let error = error {
print("Error occurred fetching album: \(error.localizedDescription)")
} else {
if let album = album {
print("found it! \(album.name)")
}
}
}
}
private func fetchAlbum(albumName: String, completion: (album: ALAssetsGroup?, error: NSError?) -> ()) {
assetsLibrary.enumerateGroupsWithTypes(ALAssetsGroupAlbum, usingBlock: { group, stop in
if group != nil {
group.setAssetsFilter(ALAssetsFilter.allPhotos())
print("group name: \(group.name)")
if group.name == albumName {
stop.initialize(true)
completion(album: group, error: nil)
}
} else {
let notFoundError = NSError.createError("Album Not Found")
completion(album: nil, error: notFoundError)
}
}) { error in
completion(album: nil, error: error)
}
}
我在找到匹配项后将 stop
变量的值更改为 true
但它仍然执行最后 returns 和 notFoundError
的 else 块。这是 print
语句的输出。
group name: Last Imported
found it! Last Imported
Error occurred fetching album: Album Not Found
如何阻止这种情况发生?
The block to invoke using each asset group in turn.
When the enumeration is done, enumerationBlock is invoked with group set to nil.
这意味着在将 stop
设置为 true 后,再次调用 enumerationBlock
,这次 group
为 nil,因此导致 completion(album: nil, error: notFoundError)
-分支被输入。
这会导致您的完成块被调用两次,一次是正确找到的专辑,另一次是在枚举结束时。
尝试插入一些 print
语句以查看何时进入哪个分支以及输入的是什么。特别是 stop
是否已经设置为 true
.
我正在使用以下代码遍历 eh 相册,如果它找到我需要的那个,它应该停止进一步循环。
public func importPhotosFromGallery(albumName: String = "Last Imported") {
fetchAlbum(albumName) { album, error in
if let error = error {
print("Error occurred fetching album: \(error.localizedDescription)")
} else {
if let album = album {
print("found it! \(album.name)")
}
}
}
}
private func fetchAlbum(albumName: String, completion: (album: ALAssetsGroup?, error: NSError?) -> ()) {
assetsLibrary.enumerateGroupsWithTypes(ALAssetsGroupAlbum, usingBlock: { group, stop in
if group != nil {
group.setAssetsFilter(ALAssetsFilter.allPhotos())
print("group name: \(group.name)")
if group.name == albumName {
stop.initialize(true)
completion(album: group, error: nil)
}
} else {
let notFoundError = NSError.createError("Album Not Found")
completion(album: nil, error: notFoundError)
}
}) { error in
completion(album: nil, error: error)
}
}
我在找到匹配项后将 stop
变量的值更改为 true
但它仍然执行最后 returns 和 notFoundError
的 else 块。这是 print
语句的输出。
group name: Last Imported
found it! Last Imported
Error occurred fetching album: Album Not Found
如何阻止这种情况发生?
The block to invoke using each asset group in turn.
When the enumeration is done, enumerationBlock is invoked with group set to nil.
这意味着在将 stop
设置为 true 后,再次调用 enumerationBlock
,这次 group
为 nil,因此导致 completion(album: nil, error: notFoundError)
-分支被输入。
这会导致您的完成块被调用两次,一次是正确找到的专辑,另一次是在枚举结束时。
尝试插入一些 print
语句以查看何时进入哪个分支以及输入的是什么。特别是 stop
是否已经设置为 true
.