我试图在Swift中创建一个http请求,获取一个JSON作为响应并保存它(从中获取所需的数据并以某种方式在屏幕上显示)
我正在提出这样的请求
func makeRequest(base: String, completionHandler: (JSON?, ErrorType?) -> Void){
do {
let opt = try HTTP.GET(baseUrl + "?base=" + base)
opt.start { response in
if let err = response.error {
completionHandler(nil, err)
return }
do {
let json = try JSON(data: response.data)
completionHandler(json, nil)
return
}
catch {
completionHandler(nil, nil)
return
}
}
} catch let error {
completionHandler(nil, error)
}
}
我打电话给" makeRequest"像这样的功能
func convert(value:Double, startCurrency:Currency, targetCurrency:Currency) -> (converted: Double, endCurrency: Currency) {
let api = ApiManager()
api.makeRequest(firstType, completionHandler: { (json:JSON?, error:ErrorType?) in
// how to save the JSON in here?
})
//calculate the correct value using the data from the json and return it
return (0.0, targetCurrency)
}
我是Swift的新手,我不确定如何存储变量" json"之后我从#34; api.makeRequest" ... 在"关闭"中我用它做的一切呆在那里(就像它应该)...... 如何将其存储为功能"转换"要归还吗?
我的做法完全错了吗?
答案 0 :(得分:0)
一次结账https://github.com/SwiftyJSON/SwiftyJSON。第二,您想将数据存储在CoreData或某种形式的数据库中吗?如果没有,您可以立即将其发布到文本字段。
SwiftyJSON示例:
let json = JSON(data: dataFromNetworking)
if let userName = json[0]["user"]["name"].string {
//Now you got your value
MytextLabel1.text = userName // set text field
}
答案 1 :(得分:0)
你的方法看起来很好,你只需要做最后一步。你有两个选择。最简单(和推荐)的方式如下:
func convert(value:Double, startCurrency:Currency, targetCurrency:Currency, cb: ((Double, Currency) -> Void) {
let api = ApiManager()
api.makeRequest(firstType, completionHandler: { (json:JSON?, error:ErrorType?) in
// handle the error?
// parse your JSON
cb(amount, currency)
})
}
要从 回调中获取数据,以下是一个示例。我假设您尝试在UILabel
中展示数据,并且您正在从convert:
子类调用UIViewController
。
// Your code
convert(12, /* whatever currency */) {
(amount, currency) in
displayLabel.text = "\(amount)"
}
// More of your code