gpt4 book ai didi

ios - Swift - 从模型中的 API 调用返回一个 JSON 对象作为字典以在 View Controller 中使用

转载 作者:行者123 更新时间:2023-11-28 13:12:02 24 4
gpt4 key购买 nike

我最近开始尝试使用 Swift,并且是强类型编程语言的新手。

我正在尝试构建对 http://openweathermap.org/api 的基本 API 调用它将在 UIView 中有一个搜索框,它接受城市名称并返回相关的天气数据。

我的问题是弄清楚如何将从模型中的 API 调用返回的 JSON 响应返回为字典,然后我可以将其用作 ViewController 中的变量。

我尝试了多种方法,但仍然出现“Dictionary not convertible to Void”错误。从研究和这篇文章 (Dictionary is not convertible to Void) 看来,返回闭包可能会提供答案,但我正在努力实现,因为我只想在 ViewController searchButton 函数中传递一个城市名称字符串参数。

下面是详细的代码片段,感谢您的帮助!

我在下面的模型中调用的 API 目前正在下拉 JSON 对象

class API {
func weatherSearch(#urlSearch: String) -> Dictionary<String,AnyObject>
{
let urlPath = "http://api.openweathermap.org/data/2.5/weather?q=" + urlSearch
let url = NSURL(string: urlPath)
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithURL(url!, completionHandler: {data, response, error -> Void in
println("Task completed")
if(error != nil) {
// If there is an error in the web request, print it to the console
println(error.localizedDescription)
}
var err: NSError?
if let jsonResult = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &err) as? NSDictionary {
var dataOut = jsonResult as Dictionary<String,AnyObject>
return dataOut
//omitted some additional error handling code
}
})
task.resume()
}
}

我的 ViewController 在其中实例化 API 并从 Searchfield 获取输入

@IBOutlet weak var searchField: UITextField!

@IBAction func searchButton() {
let api = API()
var dataOut = api.weatherSearch(urlSearch: searchField.text!)
println(dataOut)
self.performSegueWithIdentifier("Search", sender: nil)
}

最佳答案

使用上面评论所暗示的回调技术,尝试这样的事情

func weatherSearch(#urlSearch: String, callback: (Dictionary<String,AnyObject> -> ())) {
let urlPath = "http://api.openweathermap.org/data/2.5/weather?q=" + urlSearch
let url = NSURL(string: urlPath)
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithURL(url!, completionHandler: {data, response, error -> Void in
println("Task completed")
if(error != nil) {
// If there is an error in the web request, print it to the console
println(error.localizedDescription)
}
var err: NSError?
if let jsonResult = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &err) as? NSDictionary {
var dataOut = jsonResult as! Dictionary<String,AnyObject>
callback(dataOut)
//omitted some additional error handling code
}
})
task.resume()
}

weatherSearch(urlSearch: "endpoint here") { dictionary in
println(dictionary)
}

关于ios - Swift - 从模型中的 API 调用返回一个 JSON 对象作为字典以在 View Controller 中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30964825/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com