Swift - 条件绑定的初始化程序必须具有可选类型,而不是 'PHFetchResult<PHAsset>'
Posted
技术标签:
【中文标题】Swift - 条件绑定的初始化程序必须具有可选类型,而不是 \'PHFetchResult<PHAsset>\'【英文标题】:Swift - Initializer for conditional binding must have Optional type, not 'PHFetchResult<PHAsset>'Swift - 条件绑定的初始化程序必须具有可选类型,而不是 'PHFetchResult<PHAsset>' 【发布时间】:2021-01-29 05:56:34 【问题描述】:将 Xcode 更新到 12.3 后,我收到错误消息“条件绑定的初始化程序必须具有可选类型,而不是 'PHFetchResult'”,它在以前的版本中按预期工作。
func fetchRecentPhotos()
if !self.recentImagesArray.isEmptyreturn
DispatchQueue.global(qos: .default).async
let fetchOptions = PHFetchOptions()
fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]
if let fetchResult : PHFetchResult = PHAsset.fetchAssets(with: .image, options: fetchOptions)
if fetchResult.count > 0
self.recentImagesArray.removeAll()
for i in 0..<fetchResult.count
let asset = fetchResult.object(at: i)
self.recentImagesArray.append(RecentImage(asset: asset))
DispatchQueue.main.async
if !self.isVideoStarted
self.recentImagesCollectionView.reloadData()
self.recentMediaCollectionHeight.constant = 100
print("\(Date())fetchRecentPhotos ===== done")
if !self.isMultipleSelection
self.setupGesturesForCameraSelection()
UIView.animate(withDuration: 0.2, animations:
self.view.layoutIfNeeded()
)
else
print("you got no photos")
有人解决了这个问题吗?
【问题讨论】:
不是可选的,你可以直接使用let fetchResult = PHAsset.fetchAssets(with: .image, options: fetchOptions)
谢谢。这就是我现在尝试和工作的。
【参考方案1】:
请快速查看documentation:fetchAssets
返回非可选,因此您不能使用if let
。
替换
if let fetchResult : PHFetchResult = PHAsset.fetchAssets(with: .image, options: fetchOptions) ...
与
let fetchResult = PHAsset.fetchAssets(with: .image, options: fetchOptions)
【讨论】:
以上是关于Swift - 条件绑定的初始化程序必须具有可选类型,而不是 'PHFetchResult<PHAsset>'的主要内容,如果未能解决你的问题,请参考以下文章
条件绑定的初始化程序必须具有可选类型,而不是“字符串” - ios - swift
条件绑定的初始化程序必须具有可选类型,而不是“Substring.SubSequence”(又名“Substring”) - swift [重复]