ios - Swift 中的非英文字符给出:致命错误:在展开可选值时意外发现 nil
问题描述
我有一个 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
}
}
解决方案
我认为你应该使用 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
}
推荐阅读
- blockchain - 我们可以通过 Token Name 获取智能合约地址吗
- javascript - 如何在 DMN 编辑器 JavaScript 中加载 XML?
- go - 在这个 JSON 解组示例中,golang 如何处理指针?
- c++ - CPP 将类写入/读取到二进制文件中
- konvajs - 缩放到 konva.js 中的特定形状
- windows - 适用于 Windows 的全新 Flutter 应用的 CPU 使用率较高
- sql - 分区组的SQL运行余额计算
- kubernetes - Istio 虚拟服务中的查询参数匹配
- anylogic - 安排操作员休息时间
- delphi - 如何解密此 2D 加密?