首页 > 解决方案 > 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
                }
            }

标签: iosswiftxcodeswiftuicharacter

解决方案


我认为你应该使用 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
}

推荐阅读