从'Data?'强制转换为'Data'仅解开选项的包装;你的意思是使用"!"吗?



我正在尝试通过用户为资产文件夹中已有的图像键入的名称将图像发送到核心数据。然后程序应该获取图像并在单元格中的表视图控制器中向用户显示。但是,每当我用这两行运行代码时:

self.animeImage.image = UIImage(data: self.animeDetail.aImage as! Data)

cell.cellAnimeImage?.image = UIImage(data:cellAnime.aImage as! Data)

我在解开可选值时发现另一个错误 nil。我不确定为什么会发生这种情况,因为我正在尝试使用插座将我的图像放入两个单独的代码段中的图像视图中。我相信插座已经隐式地解开了可选。所以我不确定为什么我会遇到问题。任何解释将不胜感激。

从外观上看,aImage属于Data?型。如果你绝对确定它确实有价值,你可以在这里使用!(不应该使用as!(:

self.animeImage.image = UIImage(data: self.animeDetail.aImage!)

但是,通常最好检查而不是假设aImage不是nil。正如您所注意到的,有时它是nil.

if let imageData = self.animeDetail.aImage {
self.animeImage.image = UIImage(data: imageData)
}

通常,除非在相当特殊的情况下,否则应避免使用!

选项值是一个结构,

enum optionValue<T> : LogicValue, Reflectable {  
case None  
case Some(T)  
...
} 

因为!是强制类型转换,不能把结构变成数据。

已解开包装的可选:

let object = optionValue!
let object = optionValue ?? "anyDefaultValue"

如果 Some(T( 没有值,则在使用 ! 解开包装时会导致崩溃 可选值,你可以给出这样的默认值:选项值??"anyDefaultValue"以避免在没有值时崩溃

相关内容

最新更新