【问题标题】:SwiftUI, Fatal error: Unexpectedly found nil while unwrapping an Optional valueSwiftUI,致命错误:在展开可选值时意外发现 nil
【发布时间】:2020-09-19 07:14:19
【问题描述】:
func loadImageFromUrl() {
guard let urlString = self.urlString else {
return
}
let url = URL(string: urlString)!
let task = URLSession.shared.dataTask(with: url, completionHandler: self.getImageFromResponse(data:response:error:))
task.resume()
}
我不断收到let url = URL(string: urlString)! 的这个致命错误(在标题中提到),即使我在前面的几行中试图保护它。此外,当我将光标移到 urlString 上时,它确实显示了我在 API 中的预期 URL 的突出显示。
【问题讨论】:
标签:
swiftui
optional
fatal-error
unwrap
【解决方案1】:
url 仍然可以是 nil,如果 urlString 不代表有效的 URL。你没有防备它;你只提防urlString不是nil。
您需要防范这两种可能的结果:
func loadImageFromUrl() {
guard let url = URL(string: self.urlString) else {
print("Invalid url string: \(self.urlString)")
return
}
let task = URLSession.shared.dataTask(with: url, ....
// rest of your code
}
当然,这并不能解决urlString 确实被破坏的根本问题。你需要看看那里发生了什么。
由于您在视觉上看到它是正确的,因此它可能在开头或结尾包含一些空格。如果不是你控制的urlString,你可以修剪一下:
let trimmedUrlStr = self.urlString.trimmingCharacters(in: .whitespacesAndNewlines)
【解决方案2】:
这应该可以工作
if let url = URL(string: urlString) {
let task = URLSession.shared.dataTask(with: url,
completionHandler: self.getImageFromResponse(data:response:error:))
task.resume()
}