SwiftUI, Fatal error: Unexpectedly found nil while unwrapping an Optional value
SwiftUI, Fatal error: Unexpectedly found nil while unwrapping an Optional value
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 的突出显示
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,你可以trim它:
let trimmedUrlStr = self.urlString.trimmingCharacters(in: .whitespacesAndNewlines)
这应该有效
if let url = URL(string: urlString) {
let task = URLSession.shared.dataTask(with: url,
completionHandler: self.getImageFromResponse(data:response:error:))
task.resume()
}
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
仍然可以是 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,你可以trim它:
let trimmedUrlStr = self.urlString.trimmingCharacters(in: .whitespacesAndNewlines)
这应该有效
if let url = URL(string: urlString) {
let task = URLSession.shared.dataTask(with: url,
completionHandler: self.getImageFromResponse(data:response:error:))
task.resume()
}