检查url图片是不是存在

Posted

技术标签:

【中文标题】检查url图片是不是存在【英文标题】:Check if url image exist检查url图片是否存在 【发布时间】:2015-04-30 08:39:03 【问题描述】:

我正在尝试使用 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 

【问题讨论】:

这是 Swift 语言的一个基本特性。您需要从 Apple 书店认真下载 Swift 书籍并阅读它们。当你写网址!它的意思是“如果 url 为 nil,请崩溃”。 【参考方案1】:

你可以这样做:

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

   //assign your image here 

【讨论】:

这个 swift 2 兼容吗?我收到投诉:使用未解析的标识符:subJson。 Swift 3 和 4 不同,因此“if let data = NSData(contentsOfURL: url) ... ”行应替换为:“do let data = try Data( contentsOf: url) ... 捕捉 ... "【参考方案2】:

其他答案告诉你解开可选,但真正的问题是你是强制 - 用!解开可选,尽管它是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 的可选值。

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

【讨论】:

【参考方案3】:

此代码已测试成功:如果图片 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)
    

【讨论】:

你说得对,Kazaka - 以下在 Swift 5 中有效。与 Eric Aya 的示例相比,我建议使用 URL 和 Data(而不是 NSURL 和 NSData)。例如: if let url = URL(string: "example.com/cabbage.jpg") do let data = try Data(contentsOf: url) if let image = NSImage(data: data) print(" *** (image)" ) 捕捉 打印(错误) 【参考方案4】:

你必须像这样打开可选的:

if let image = data 
    // use image here
 else 
    // the data is nil

【讨论】:

以上是关于检查url图片是不是存在的主要内容,如果未能解决你的问题,请参考以下文章

检查 URL 是不是存在

检查 URL 文件是不是存在

检查 URL 是不是存在于 Flutter 中时出错

检查服务器上是不是存在 URL

如何通过 PHP 检查 URL 是不是存在?

Laravel 检查给定 url 的路由是不是存在于路由中