在 iOS 的多个地方使用响应
using response in multiple places in iOS
我尝试了很多来自 Whosebug 和谷歌搜索的方法
但我没能得到我需要的东西。
只是我想将 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
}
}
因为我有多个 class 并且每个 class 都需要以不同的方式处理响应 我想创建一个 api class 和响应方法这将 return 响应。
可能是这样的:
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,我不介意使用其他方法
这是我尝试关注但没有成功的一些帖子和网站
所有方法仅在方法内部导致相同的结果响应。
问题是对网络的调用(看起来你正在使用 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 语句来在加载数据时进行更改,您还需要通知 table 视图或其他 UI 组件以重新加载它们的数据源这个方法。
我尝试了很多来自 Whosebug 和谷歌搜索的方法 但我没能得到我需要的东西。
只是我想将 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
}
}
因为我有多个 class 并且每个 class 都需要以不同的方式处理响应 我想创建一个 api class 和响应方法这将 return 响应。
可能是这样的:
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,我不介意使用其他方法
这是我尝试关注但没有成功的一些帖子和网站
所有方法仅在方法内部导致相同的结果响应。
问题是对网络的调用(看起来你正在使用 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 语句来在加载数据时进行更改,您还需要通知 table 视图或其他 UI 组件以重新加载它们的数据源这个方法。