У меня есть функция для проверки есть ли album в photos. У меня допустим есть "Golohram" album, но мне нужно проверить правда ли она существует на этом айфоне. Вопрос таков, как мне правильно ёё вызвать? Застрял на 2 части с completionHandler.
Функция:
func getAlbum(title: String, completionHandler: @escaping (PHAssetCollection?) -> ()) {
DispatchQueue.global(qos: .background).async { [weak self] in
let fetchOptions = PHFetchOptions()
fetchOptions.predicate = NSPredicate(format: "title = %@", title)
let collections = PHAssetCollection.fetchAssetCollections(with: .album, subtype: .any, options: fetchOptions)
if let album = collections.firstObject {
completionHandler(album)
} else {
self?.createAlbum(withTitle: title, completionHandler: { (album) in
completionHandler(album)
})
}
}
}
Ответ
Когда вы вызовите эту функцию и передадите строку. Она стразу ничего не вернет, а отработает только тогда, когда сработает блок в теле вашей функции и вернет тот объект который вы положили в блок..
Сам код вызова функции должен примерно выглядеть вот так.
getAlbum(title: "Golohram") { [weak self] assetCollection in //assetCollection это просто имя которое я дал названию возвращаемого элемента
guard let this = self else { return } //простая защита от потери памяти, замыкание является ссылочным типом
guard assetCollection != nil else { return } //проверка на наличие объекта
print(assetCollection!) //если объект сцществует, он будет распечатан
}
Комментариев нет:
Отправить комментарий