gpt4 book ai didi

ios - 在 iOS 的多个地方使用响应

转载 作者:行者123 更新时间:2023-11-29 02:20:10 24 4
gpt4 key购买 nike

我尝试了很多来自 stackoverflow 和谷歌搜索的方法但我没有运气达到我需要的东西。

只是我想将 api 请求的响应存储到某个变量以便我可以自由使用它。

这是代码

import UIKit

class ViewController: UIViewController {

@IBOutlet weak var responseLabel: UILabel!
let apiUrlStr = "http://jsonplaceholder.typicode.com/posts"

var resData = NSArray()

override func viewDidLoad() {
super.viewDidLoad()
request(.GET, apiUrlStr, encoding: .JSON).responseJSON { (_, _, JSON, _) in
let arr = JSON as NSArray
let user = arr[0] as NSDictionary
self.responseLabel.text = user.objectForKey("title") as? String

self.resData = JSON as NSArray //i cant get this from outside
}

println(resData) //prints nothing but empty parentheses while inside the request it prints the data right
}
}

因为我有多个类,每个类都需要以不同的方式处理响应,所以我想创建一个带有响应方法的 api 类,该方法将返回响应。

可能是这样的:

class api{
func req(url: String, params: NSDictionary){
//method goes here
}

func res() -> NSDictionary{
//method goes here
var response = NSDictionary()
return response
}
}

然后在viewdidload中这样使用

let params = ["aaa","bbb"]
let api = api()
api.req(apiUrlStr, params)
let res = api.res()

***顺便说一句,我现在使用的请求方法来自 Alamofire.swift,我不介意使用其他方法

这是我尝试关注但没有成功的一些帖子和网站

proper-way-to-pull-json-api-resoponse

link2

所有这些都只会从方法内部导致相同的结果响应。

最佳答案

问题是对网络的调用(看起来你正在使用 alamofire)是异步的。所以网络请求开始,在它完成之前,你的

println(resData)

行执行。此时来自网络的响应还没有返回,所以 resData 仍然是一个空数组。

尝试这样做:

添加一个新函数

func handleResponse(resData: NSArray) {
self.resData = resData
println(resData)
}

然后在响应代码中替换

self.resData = JSON as NSArray

let resData = JSON as NSArray
self.handleResponse(resData)

假设在加载数据时您需要的不仅仅是 println 语句来更改,您还需要通知 TableView 或其他 UI 组件以通过此方法重新加载它们的数据源。

关于ios - 在 iOS 的多个地方使用响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28248783/

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