Swift 中的非英文字符给出:致命错误:在展开可选值时意外发现 nil
Posted
技术标签:
【中文标题】Swift 中的非英文字符给出:致命错误:在展开可选值时意外发现 nil【英文标题】:Non english character in Swift gives: Fatal error: Unexpectedly found nil while unwrapping an Optional value 【发布时间】:2021-04-08 19:50:19 【问题描述】:我有一个 API URL,我通过变量 self.origin.input
输入街道名称。这一切都很好,直到我输入一个带有非英文字符的街道名称,例如 Å、Ä 和 Ö 这些都是这里的常见字符在瑞典。如果我这样做,我会收到错误消息:
Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
有谁知道如何解决这个问题?
这是我的代码中发生错误的部分:
let locationUrl = URL(string: "https://nominatim.openstreetmap.org/search?country=Sweden&city=Stockholm&street=\(self.origin.input)&format=json")
URLSession.shared.dataTask(with: locationUrl!) data, response, error in
if let data = data
// My logic here
【问题讨论】:
一般来说,你不应该使用!
来强制解包,因为有崩溃的风险。在获取有效网址方面,这是否回答了您的问题? ***.com/a/48946469/560942
【参考方案1】:
我认为你应该使用 URL 编码。在 Swift 中是这样发生的:
let urlStr = "https://nominatim.openstreetmap.org/search?country=Sweden&city=Stockholm&street=\(self.origin.input)&format=json"
let urlEncoded = urlStr.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
let url = URL(string: urlEncoded)
我还强烈建议您摆脱使用 !
的强制解包。你可以使用
guard let url = URL(string: urlEncoded) else /* handle nil here */
或
if let url = URL(string: urlEncoded)
// url is not nil
else
// url is nil
【讨论】:
以上是关于Swift 中的非英文字符给出:致命错误:在展开可选值时意外发现 nil的主要内容,如果未能解决你的问题,请参考以下文章
Swift 物理致命错误:当两个字符发生碰撞时,在展开可选值时意外发现 nil
Swift 中的可选类型错误:致命错误:在展开可选值时意外发现 nil
Swift Xcode 致命错误:在隐式展开可选值时意外发现 nil [重复]