【问题标题】: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()
      }
      

      【讨论】:

        猜你喜欢
        • 2021-04-10
        • 2021-06-26
        • 2016-01-26
        • 2016-02-29
        • 2016-01-08
        相关资源
        最近更新 更多