用的 Alamofire
var pageData = [Item]()
func get(url: String) {
Alamofire
.request(.GET, url, parameters: nil)
.responseJSON { (request, response, data, error) in
if error == nil {
var jsonData = JSON(data!)
for (key: String, json: JSON) in jsonData {
let item = Item.createItemWidthJsonData(json["title"].stringValue, image: json["image"].stringValue, text: json["text"].stringValue)
self.pageData.append(item)
}
}
}
}
请求结束后填充 pageData 数组
可不等请求结束,系统就要调用其他方法,其他方法依赖 pageData 数组
此种情况一般怎么处理?
1
fatea 2015-03-18 20:25:35 +08:00 via iPhone
同问...
|
2
oIIo 2015-03-18 20:54:27 +08:00
把这个线程先挂起,得到响应后在继续。 这是什么语言?
|
3
oIIo 2015-03-18 20:58:19 +08:00
swift里面有没有类似 event 的机制呀? 好像Objective-c 有个什么 Notification 之类的类,可以用了通知事件。
|
4
123123 2015-03-18 21:58:27 +08:00
加个锁,调用其他方法检查锁等待数据
|
5
alangz 2015-03-18 22:10:16 +08:00
这是go语言吧,这种情况个人认为系统可以先调用其他方法继续执行,在执行到需要pageData数组的地方挂起线程,等待pageData数组填充完成之后通知上一个线程继续执行。
|
6
ETiV 2015-03-18 22:12:28 +08:00 via iPhone
这不就是JS的异步嘛。
看着像是个http请求的框架,把有依赖关系的“其他方法”拿出来,放到responseJSON内部的末尾。 iOS更新UI需要在主线程,写回调函数的时候注意到这点就可以了。 |
7
keithellis 2015-03-19 10:22:33 +08:00
NSOperation addDependency(_ operation: NSOperation)
GCD dispatch_group |
8
knightlhs 2015-03-19 20:11:10 +08:00
go 语言的话 开个 chan 然后等待 由于 chan 是阻塞的 所以后面的代码无法继续只有等 chan 完成
很简单的 |
9
dorentus 2015-03-19 21:15:00 +08:00 via iPad
var pageData: [Item] = [] {
didSet { // blahblah } } |
10
babyname OP |
11
vincentxue 2015-03-20 14:36:16 +08:00 1
对 iOS 开发来说,你这种情况用锁或者依赖都不太适合,如果你是请求数据然后完成展示了才能操作,那你就应该挂个HUD,等数据请求完成,展示出来之后再关掉这个HUD,现在才允许用户做操作。
如果你是内部调用,那就更简单了,调用放在这个请求回调里不就可以了。 |