Ios 在展开可选值时意外发现nil

Ios 在展开可选值时意外发现nil,ios,iphone,xcode,swift,Ios,Iphone,Xcode,Swift,在我的应用程序中,我正在检查帖子是否有图片 为此,我使用: if pictures[string]? != nil { if var image: NSData? = pictures[string]? { imageView.image = UIImage(data: image!) } } 但是,它仍然会出现错误: 致命错误:在展开可选值时意外发现nil 我相信这很容易解决,但我对这一点很陌生-我做错了什么?试着这样做: if let imageData =

在我的应用程序中,我正在检查帖子是否有图片

为此,我使用:

if pictures[string]? != nil {
    if var image: NSData? = pictures[string]? {
        imageView.image = UIImage(data: image!)
    }
}
但是,它仍然会出现错误:

致命错误:在展开可选值时意外发现nil

我相信这很容易解决,但我对这一点很陌生-我做错了什么?

试着这样做:

if let imageData = pictures[string] {
    if let image = UIImage(data: imageData) {
        imageView.image = image
    }
}
假设
string
是有效键

您正在处理选项,因此在使用每个返回对象之前有条件地将其展开


强制展开是危险的,只有在绝对确保可选值包含值时才应使用。您的imageData的格式可能不正确,无法创建图像,但您仍在强制将其展开。在Objective-C中可以这样做,因为它只意味着
nil
对象被传递。Swift不那么宽容。

当您忘记包装可选值时,这是Swift的问题

替换行
imageView.image=UIImage(数据:image!)

使用
imageView?.image=UIImage(数据:image!)
我在这段代码中遇到了同样的问题

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])
 }

首先仔细检查base64字符串的格式。我的字符串的格式如下:
data:image/png;base64,IVBorW0KggoaaaAnsuhueugaajaaacqcayaaadnruk4aaazdeleqvr42u1dawatzrp+JkfT+76g90eltkux5wicshregykkaicc4icu+iq6q6q6cokulf4igl6jldakgijwin5sjqaulpte97zy90qrj9sc
但逗号之前的所有内容都不是必需的。通过将格式更改为:
IVBORW0KGGOAAAANSUHUEUGAAJAAACQCAYAAADNRUK4AAAZDELEQVR42U1DAWATZRP+JkfT+76g90ELtKUX5wICshREgYKCKAiCC4iCu+Iq6q6CoKuLF4Igl6jLDaKgiJwiN5SjQAulpTe97zY90qRJ9sc
谢谢:)现在工作!