Swift 将链接从字符串转换为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=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
时才会有值。