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 [重复]

Swift 错误致命错误:在展开可选值时意外发现 nil

SWIFT 致命错误:在展开可选值 (lldb) 时意外发现 nil

swift 2 致命错误:在展开可选值时意外发现 nil - 类别名称