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

Ben*_*ray 9 iphone xcode ios swift

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

为此,我使用:

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

但是,它仍然会出现错误:

致命错误:在展开Optional值时意外发现nil.

我确信它很容易修复,但我对此很陌生 - 我做错了什么?

Ano*_*rak 14

尝试这样做:

if let imageData = pictures[string] {
    if let image = UIImage(data: imageData) {
        imageView.image = image
    }
}
Run Code Online (Sandbox Code Playgroud)

假设这string是一个有效的密钥.

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

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