在我的应用中,我正在查看帖子是否有图片。
为此我正在使用:
if pictures[string]? != nil {
if var image: NSData? = pictures[string]? {
imageView.image = UIImage(data: image!)
}
}
然而,它仍然出现错误:
致命错误:在解包可选值时意外发现nil。
我确定这很容易解决,但我对此很陌生 - 我做错了什么?
答案 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