检查url图像是否存在
我正在尝试使用if语句检查是否存在url图像。 但是,当尝试通过错误的图像url测试它时,它会继续返回:
致命错误:在展开Optional值时意外发现nil。
码:
var httpUrl = subJson["image_url"].stringValue let url = NSURL(string: httpUrl) let data = NSData(contentsOfURL: url!) if UIImage(data: data!) != nil { }
你可以这样做:
var httpUrl = subJson["image_url"].stringValue if let data = NSData(contentsOfURL: url) { //assign your image here }
其他答案告诉你解开可选的,但问题是你强制 –包装可选的!
,尽管它是nil
。
当你写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组合在一起意味着你无法分辨哪一个失败,所以你可能想要将它们分解为单独的语句。
你必须像这样解开可选项:
if let image = data { // use image here } else { // the data is nil }
此代码已经过测试并且成功:如果图像url不存在则不会崩溃。
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) }