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
谢谢:)现在工作!