来自“数据”的强制演员?'到数据'只打开选项;你的意思是使用'!'?

时间:2018-05-31 22:46:44

标签: ios swift

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

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

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

在解包可选值时,我发现另一个错误为nil。我不确定为什么会发生这种情况,因为我尝试使用插座将这些图像分成两个独立的代码片段。我相信出口已经隐式拆开可选。所以我不确定为什么我会遇到问题。任何解释都将不胜感激。

2 个答案:

答案 0 :(得分:4)

根据它的外观,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)
}

作为一项规则,除非在相当特殊的情况下,否则应避免使用!

答案 1 :(得分:0)

optionValue是一个结构,

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

如!是强制型转换,你不能把结构变成数据。

解包可选:

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

如果某些(T)没有值,则在使用时会导致崩溃!打开包装 optionalValue,你可以给出一个像这样的默认值:optionValue ?? &#34; anyDefaultValue&#34;当没有价值时避免崩溃