SwiftUI,致命错误:在展开可选值时意外发现nil

SwiftUI,致命错误:在展开可选值时意外发现nil,swiftui,optional,fatal-error,unwrap,Swiftui,Optional,Fatal Error,Unwrap,对于let url=url(string:urlString),即使我在前面几行中尝试过保护它。此外,当我将光标移动到urlString上时,它确实会从API中突出显示我的预期url。url如果urlString不代表有效url,则仍然可能是nil。你没有防备这一点;您只保护了urlString不被nil 您需要警惕这两种可能的结果: func loadImageFromUrl() { guard let urlString = self.urlString else {

对于
let url=url(string:urlString),即使我在前面几行中尝试过保护它。此外,当我将光标移动到
urlString
上时,它确实会从API中突出显示我的预期url。

url
如果
urlString
不代表有效url,则仍然可能是
nil
。你没有防备这一点;您只保护了
urlString
不被
nil

您需要警惕这两种可能的结果:

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()
}
当然,这并不能解决
urlString
确实被破坏的根本问题。你需要看看那里发生了什么

因为您可以从视觉上看到它是正确的,所以它的开头或结尾可能包含一些空格。如果您控制的不是URL字符串,则可以对其进行修剪:

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
}
这应该行得通

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()
}