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)!)
我是 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)!)