检查url图像是否存在

时间:2015-04-30 08:39:04

标签: ios swift

我正在尝试使用if语句检查是否存在url图像。然而,当试图通过错误的图像url测试它时,它会继续返回:

  

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

代码:

var httpUrl = subJson["image_url"].stringValue
let url = NSURL(string: httpUrl)
let data = NSData(contentsOfURL: url!)

if UIImage(data: data!) != nil {
}

4 个答案:

答案 0 :(得分:6)

你可以这样做:

var httpUrl = subJson["image_url"].stringValue
if let data = NSData(contentsOfURL: url) {

   //assign your image here 
}

答案 1 :(得分:6)

其他答案告诉您打开可选项,但实际问题是您强制 - 使用!包裹可选项,尽管它是nil。< / p>

当您写下something!时,您所说的“something可能是nil,但如果是,我希望我的程序崩溃”。

调用可能返回nil的原因是结果无效 - 例如,如果您尝试从不存在的字典中获取密钥,或者URL未指向一个有效的可下载图像。

您可以将nil的检查与展开可选项的if语句结合使用,并返回非可选值,只要该值不是nil即可。您也可以将它们链接在一起,因此如果您需要打开一个值,然后将其传递给一个也返回一个可选项的调用,您可以在一个if语句中完成所有操作:

if let httpUrl = subJson["image_url"].string,   
       url = NSURL(string: httpUrl),
       data = NSData(contentsOfURL: url),
       image = UIImage(data: data)
{
    // use image value
}
else {
    // log some error
}

注意,在第一行,调用是.string而不是.stringValue - .string如果值不存在,也会返回nil的可选项。

当然,将所有这些unwraps组合在一起意味着您无法告诉哪一个失败,所以您可能希望将它们分解为单独的语句。

答案 2 :(得分:2)

此代码经过测试并成功:如果图片网址不存在则不会崩溃。

let url: NSURL = NSURL(string: "http://www.example.com/images/image.png")!
    do {
        let imgData = try NSData(contentsOfURL: url, options: NSDataReadingOptions())
        ImageView?.image = UIImage(data: imgData)
    } catch {
        print(error)
    }

答案 3 :(得分:1)

您必须打开这样的选项:

if let image = data {
    // use image here
} else {
    // the data is nil
}
相关问题