在打开可选值时意外地发现了nil

时间:2014-10-31 13:08:55

标签: ios iphone xcode swift

在我的应用中,我正在查看帖子是否有图片。

为此我正在使用:

if pictures[string]? != nil {
    if var image: NSData? = pictures[string]? {
        imageView.image = UIImage(data: image!)
    }
}

然而,它仍然出现错误:

  

致命错误:在解包可选值时意外发现nil。

我确定这很容易解决,但我对此很陌生 - 我做错了什么?

4 个答案:

答案 0 :(得分:14)

尝试这样做:

if let imageData = pictures[string] {
    if let image = UIImage(data: imageData) {
        imageView.image = image
    }
}

假设string是有效密钥。

您正在处理选项,因此在使用之前有条件地解包每个返回对象。

强制展开是危险的,只有在绝对确定可选项包含值时才应使用。您的imageData可能没有正确的格式来创建图像,但无论如何您都强行打开它。这在Objective-C中可以做,因为它只是意味着传递了nil个对象。斯威夫特不是那么宽容。

答案 1 :(得分:1)

当你忘记包装可选值时,这是swift的问题

替换第var cards = element.all(by.css('.cardtitle')); expect(cards.length).toBe(3); cards.get(0).click(); cards.get(1).click(); cards.get(2).click(); 行 与imageView.image = UIImage(data: image!)

答案 2 :(得分:0)

我遇到了与此代码相同的问题

if(!placeholderColor.isEqual(nil))
 {
   self.attributedPlaceholder = NSAttributedString(string: self.placeholder!, attributes: [NSForegroundColorAttributeName : placeholderColor])
 }

并由此解决

if let placeColor = placeholderColor
 {
   self.attributedPlaceholder = NSAttributedString(string: self.placeholder!, attributes: [NSForegroundColorAttributeName : placeColor])
 }

答案 3 :(得分:0)

首先仔细检查base64字符串的格式。我的字符串具有以下格式:data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJAAAACQCAYAAADnRuK4AAAZDElEQVR42u1daWATZRp+JkfT+76g90ELtKUX5wICshREgYKCKAiCC4iCu+Iq6q6CoKuLF4Igl6jLDaKgiJwiN5SjQAulpTe97zY90qRJ9sc,但不需要逗号前的所有内容。我通过将格式更改为以下代码来工作了:
iVBORw0KGgoAAAANSUhEUgAAAJAAAACQCAYAAADnRuK4AAAZDElEQVR42u1daWATZRp+JkfT+76g90ELtKUX5wICshREgYKCKAiCC4iCu+Iq6q6CoKuLF4Igl6jLDaKgiJwiN5SjQAulpTe97zY90qRJ9sc