快速获取条件绑定的错误初始化程序必须具有可选类型,为啥?
Posted
技术标签:
【中文标题】快速获取条件绑定的错误初始化程序必须具有可选类型,为啥?【英文标题】:swift getting error initializer of conditional binding must have optional type, why?快速获取条件绑定的错误初始化程序必须具有可选类型,为什么? 【发布时间】:2017-02-01 22:42:05 【问题描述】:我正在使用 swift 和 cloudkit 尝试从 cloudserver 获取图像,如下所示,我收到错误:“条件绑定的初始化程序必须具有可选类型而不是 CKAsset”:if let ckAsset = image 请帮忙,因为我是 swift 新手,这是我的第一个应用程序
let ckRecord = Saveddata[indexPath.row]
weak var weakCell = cell
backgroundQueue.addOperation
let image = ckRecord.object(forKey: "Photos") as! CKAsset
if let ckAsset = image
if let URL = ckAsset.fileURL
let imagedata = NSData(contentsOf: URL)
OperationQueue.main.addOperation()
cell.imageView?.image = UIImage(data: imagedata! as Data)
【问题讨论】:
每当您使用if let
时,=
的右手应该是一个可选。但是image
不是并且是可选的。因为:在使用as! CKAsset
强制展开图像之前的行中
那么我如何执行相同的逻辑并强制图像成为 CKAsset
如果您收到该错误:请勿使用if let
。只需使用let
。尽管最好使用guard
而不是整个强制展开
使用守卫见here
【参考方案1】:
我认为您正在寻找的是:
let ckRecord = Saveddata[indexPath.row]
weak var weakCell = cell
backgroundQueue.addOperation
let image = ckRecord.object(forKey: "Photos")
// Conditionally cast image resource
if let ckAsset = image as? CKAsset
// This isn't optional, no protection needed
let url = ckAsset.fileURL
// Data(contentsOf:...) will throw on failure
do
// Fetch the image data (try because it can fail and will throw if it does)
let imagedata = try Data(contentsOf: url)
OperationQueue.main.addOperation()
weakCell?.imageView?.image = UIImage(data: imagedata)
catch
// handle data fetch error
它有条件地将资源转换为CKAsset
,并且仅在它实际上是一个时才继续。
【讨论】:
@rania 或者你的意思是这也很有意义 可能是真的,有足够多的东西丢失/未定义,我刚刚解决了他抱怨的明显问题。 @david Berry 我相信是的-但现在我在第二行有同样的错误:如果让 URL = ckAsset.fileURL 我应该挂在:如果让 URL = ckAsset.fileURL 为?网址fileUrl
不是可选的,你不需要if let URL
以上是关于快速获取条件绑定的错误初始化程序必须具有可选类型,为啥?的主要内容,如果未能解决你的问题,请参考以下文章
条件绑定:if let error - 条件绑定的初始化程序必须具有可选类型
条件绑定:if let error - 条件绑定的初始化程序必须具有可选类型
条件绑定的初始化程序必须具有可选类型,而不是“Bool”-firebase
ios:条件绑定的初始化程序必须具有可选类型,而不是“LOTAnimationView”