Swift 将链接从字符串转换为url时出现问题将链接从字符串转换为url时出现问题
今天我遇到了一个问题,由于某种原因,url不想读取链接。 我不知道如何解决这个问题。我在这里写的所有内容:Swift 将链接从字符串转换为url时出现问题将链接从字符串转换为url时出现问题,swift,Swift,今天我遇到了一个问题,由于某种原因,url不想读取链接。 我不知道如何解决这个问题。我在这里写的所有内容:url=url(字符串:“here”),由于某种原因,没有转换成链接。据我所知,我在任何地方都得到了nil,因为我甚至不去上学 let task=URLSession.shared.dataTask(with:url!),因为url不会从字符串转换为url func searchBarSearchButtonClicked(_ searchBar: UISearchBar) { //
url=url(字符串:“here”)
,由于某种原因,没有转换成链接。据我所知,我在任何地方都得到了nil
,因为我甚至不去上学
let task=URLSession.shared.dataTask(with:url!)
,因为url不会从字符串转换为url
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
// po searchBar.text
// print object
let urlString = "http://api.weatherstack.com/current?access_key=617ce097a4c8352ad4fa7b34e2570aa8&query=\(searchBar.text!)"
let url = URL(string: urlString)
var locationName: String?
var temperature: Double?
let task = URLSession.shared.dataTask(with: url!) { (data, response, error) in
do {
let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as! [String : AnyObject]
if let location = json["location"] {
locationName = location["name"] as? String
}
if let current = json["current"] {
temperature = current["temperature"] as? Double
}
}
catch let jsonError {
print(jsonError)
}
}
task.resume()
}
决不能强制展开从用户输入的动态
字符串创建的URL
。您可以选择绑定URL(string:)
的返回值,还可以对搜索栏输入进行百分比编码,以确保URL字符串有效
let urlString = "http://api.weatherstack.com/current?access_key=617ce097a4c8352ad4fa7b34e2570aa8&query=\(searchBar.text!)"
guard let encodedUrlString = urlString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed),
let url = URL(string: encodedUrlString) else {
// You could display an error message to the user from here
return
}
与您的问题无关,但您不应该使用JSONSerialization
来解码JSON响应。请改用Codable
。您不应强制展开从用户输入的动态字符串创建的URL
。您可以选择绑定URL(string:)
的返回值,还可以对搜索栏输入进行百分比编码,以确保URL字符串有效
let urlString = "http://api.weatherstack.com/current?access_key=617ce097a4c8352ad4fa7b34e2570aa8&query=\(searchBar.text!)"
guard let encodedUrlString = urlString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed),
let url = URL(string: encodedUrlString) else {
// You could display an error message to the user from here
return
}
与您的问题无关,但您不应该使用JSONSerialization
来解码JSON响应。改为使用Codable
。我尝试按您的方式执行,但我的输出如下:线程5:致命错误:在解开代码中已有的可选值时意外发现nil,此处:让json=try JSONSerialization.jsonObject(with:data!,options:.mutableContainers)as![字符串:AnyObject]:(我还是Swift新手,在youtube上观看了一位博主的视频教程,遇到了这个问题。尽管这家伙一切都很好,但我不明白问题是什么。在数据和响应中,结果获得了零值,我知道链接不可读。问题不在链接中?我附上了一张图片使用调试器。这与您的原始问题无关。该错误来自JSON解析。请查看以了解如何解析JSON。最简单的解决方案是简单地将JSON响应放入,它将为您生成可编码的模型。此外,您需要检查URL请求中是否存在错误st,data
只有在error
为nil
时才会有一个值。我尝试按您的方式执行此操作,但我的输出如下:线程5:致命错误:在打开代码中已有的可选值时意外发现nil,此处:让json=try JSONSerialization.jsonObject(with:data!,options:.mutableContainers)as![字符串:AnyObject]:(我还是Swift新手,在youtube上观看了一位博主的视频教程,遇到了这个问题。尽管这家伙一切都很好,但我不明白问题是什么。在数据和响应中,结果获得了零值,我知道链接不可读。问题不在链接中?我附上了一张图片使用调试器。这与您的原始问题无关。该错误来自JSON解析。请查看以了解如何解析JSON。最简单的解决方案是简单地将JSON响应放入,它将为您生成可编码的模型。此外,您需要检查URL请求中是否存在错误st,data
只有在error
为nil
时才会有值。