SwiftUI, Fatal error: 在解包一个可选值时意外发现nil。

问题描述 投票:0回答:1
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个回答
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)

0
投票

这样就可以了

if let url = URL(string: urlString) {
    let task = URLSession.shared.dataTask(with: url, 
       completionHandler: self.getImageFromResponse(data:response:error:))
    task.resume()
}
© www.soinside.com 2019 - 2024. All rights reserved.