我有一个图片网址字符串:
var remoteImage: String = "http://server.com/wall-e.jpg"
然后,我使用Grand Central Dispatch作为字符串参数构造一个UIImage以在单独的线程上下载:remoteImage
NSURL
let getImage = UIImage(data: NSData(contentsOfURL: NSURL(string: remoteImage)!)!)
完成后,我返回主线程,将其保存在内部:
UIImageJPEGRepresentation(getImage, 1.0).writeToFile(imagePath, atomically: true)
在Wi-fi和LTE上,它可以正常下载,但是在测试边缘情况(例如在边缘网络上(无双关语))时,我不一致地收到错误消息:
fatal error: unexpectedly found nil while unwrapping an Optional value
现在,我想通过确保不nil
添加来确保自己安全:
if getImage != nil { ... }
但这似乎没有什么不同。它仍然会收到错误并突出显示let getImage
上面写的。我在这里做错了什么?我应该以其他方式或方法检查nil吗?
实际上,该错误确实存在:
let getImage = UIImage(data: NSData(contentsOfURL: NSURL(string: remoteImage)!)!)
原因是最初返回nil的不是UIImage,很可能是NSData返回nil。您可以检查NSData是否返回nil,然后创建UIImage对象。
编辑:特定代码行在做的是假设NSData始终返回非零值,当您未连接时这可能不正确。当您未连接时,它将获得一个nil值,您尝试使用感叹号(!)将该值永远设为nil值。
我建议您进一步阅读Swift的工作原理。对于此特定示例,请看一下感叹号在Swift中的实际含义:感叹号在Swift语言中是什么意思?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句