网址(字符串:)给出 nil 错误,即使 String 在 Swift 中不是 nil



我有以下代码:

print("CODE STRING SELECTED: (codeString)")
let aURL = URL(string: codeString)!
if UIApplication.shared.canOpenURL(aURL) { UIApplication.shared.openURL(aURL) }

此代码位于按钮内,Xcode 控制台正确打印codeString,它不是nil,因此它应该打开codeString的 URL,相反,Xcode 会抛出此错误:

CODE STRING SELECTED: mailto:john@doe.com?subject=Subject here&body=Lorem ipsum dolor sit, amet quatum.
Fatal error: Unexpectedly found nil while unwrapping an Optional value
2019-07-08 11:19:56.076467+0200 QRcode[2751:1043394] Fatal error: Unexpectedly found nil while unwrapping an Optional value

在电话号码或短信字符串的情况下也会发生同样的事情(我从扫描的二维码中获取codeString值(:

CODE STRING SELECTED: tel:+1 2345678901
Fatal error: Unexpectedly found nil while unwrapping an Optional value
CODE STRING SELECTED: SMSTO:+1012345678:lorem ipsum dolor sit, amet
Fatal error: Unexpectedly found nil while unwrapping an Optional value

如果是URL,如https//example.com,应用程序不会崩溃,没有nil错误,文本也是如此,等等。所以我真的不明白为什么即使codeString没有nil,我也会收到这个错误.

字符串未nil,但它不表示有效的 URL。您必须对 URL 进行编码。

但是,建议安全地解开可选包

if let encodedString = codeString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed),
   let aURL = URL(string: encodedString), UIApplication.shared.canOpenURL(aURL) { 
    UIApplication.shared.openURL(aURL) 
}

url 是nil的,因为它无法在不转义您到达那里的空格的情况下创建。

这将起作用:

guard let escapedString = codeString.addingPercentEncoding(withAllowedCharacters: urlQuoeryAllowed), 
      let url = URL(string: escapedString) else {
 return
}

相关内容

  • 没有找到相关文章