gpt4 book ai didi

ios - enumerateGroupsWithTypes 循环没有停止

转载 作者:行者123 更新时间:2023-11-28 06:50:56 24 4
gpt4 key购买 nike

我正在使用以下代码遍历 eh albums,如果它找到我需要的那个,它应该停止进一步循环。

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 但它仍然执行返回 notFoundError 的 else block 结束。这是 print 语句的输出。

group name: Last Imported

found it! Last Imported

Error occurred fetching album: Album Not Found

如何阻止这种情况发生?

最佳答案

docs for enumerationBlock状态

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)-要进入的分支。

这会导致您的完成 block 被调用两次,一次是正确找到的专辑,另一次是在枚举结束时。

尝试插入一些 print 语句来查看何时进入哪个分支以及输入的是什么。特别是 stop 是否已设置为 true

关于ios - enumerateGroupsWithTypes 循环没有停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34942109/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com