Swift URL 无异常

Swift Nil Exception on URL

我是 Swift 的新手,正在编写一个从扫描仪读取数据然后将其发布到网页的应用程序。我现在从主故事板上的文本编辑字段中获取数据,当我按下查找按钮触发以下代码时,它会抛出以下异常。我设置了一个断点并在 URL 中使用它之前检查了 temp 的值,并且它的颜色正确(不是零)。如果我在编辑字段中输入,那么代码从那时起就可以正常工作;即使我使用清除图标 (x) 删除编辑字段的内容也会打开页面。

我不知道哪个变量是 nil 以及如何更正或保护代码。任何帮助将不胜感激。

Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value

func setStatus(_ status: String)
{
    statusLabel.text = status
}

func processRead(_ data: String?)
{
    if (data != nil)
    {
        var temp: String = data!
        setStatus(temp)

        temp = "foo.com?data=" + temp

        let url: URL = URL(string: temp)!      //  <<<< THROWS EXCEPTION / BREAK POINT 
        UIApplication.shared.openURL(url)
    }
}

更新 -- 更正代码 --

func setStatus(_ status: String)
{
    statusLabel.text = status
}


func processRead(_ data: String?)
{
    if (data != nil && !data!.isEmpty)
    {
        let temp = "https://foo.com/data=" + data!.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)!);
        if let url = URL(string: temp)
        {
            setStatus(data!)
            UIApplication.shared.openURL(url)
        }
        else
        {
            print("Bad URL: " + temp);
        }
    }
}

发生的事情是,当用临时字符串初始化 URL 对象时,它无法成功地将字符串转换为 URL。由于 URL 初始化器 init?(string: String) 是一个可选的初始化器,如果将 sting 转换为 URL 时出错,它可以 return nil。尝试将 "https://" 添加到您的字符串中。

 temp = "https://foo.com?data=" + temp

temp 可能包含一些在 URL 的查询部分中无效的字符。这使得整个字符串不是有效的 URL,因此 URL.init returns 为零。您需要通过调用 addingPercentEncoding:

来转义这些字符
URL(string: "foo.com?data=" + temp.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)!)