
用的 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 年 3 月 18 日 via iPhone 同问... |
2 oIIo 2015 年 3 月 18 日 把这个线程先挂起,得到响应后在继续。 这是什么语言? |
3 oIIo 2015 年 3 月 18 日 swift里面有没有类似 event 的机制呀? 好像Objective-c 有个什么 Notification 之类的类,可以用了通知事件。 |
4 123123 2015 年 3 月 18 日 加个锁,调用其他方法检查锁等待数据 |
5 alangz 2015 年 3 月 18 日 这是go语言吧,这种情况个人认为系统可以先调用其他方法继续执行,在执行到需要pageData数组的地方挂起线程,等待pageData数组填充完成之后通知上一个线程继续执行。 |
6 ETiV 2015 年 3 月 18 日 via iPhone 这不就是JS的异步嘛。 看着像是个http请求的框架,把有依赖关系的“其他方法”拿出来,放到responseJSON内部的末尾。 iOS更新UI需要在主线程,写回调函数的时候注意到这点就可以了。 |
7 keithellis 2015 年 3 月 19 日 NSOperation addDependency(_ operation: NSOperation) GCD dispatch_group |
8 knightlhs 2015 年 3 月 19 日 go 语言的话 开个 chan 然后等待 由于 chan 是阻塞的 所以后面的代码无法继续只有等 chan 完成 很简单的 |
9 dorentus 2015 年 3 月 19 日 via iPad var pageData: [Item] = [] { didSet { // blahblah } } |
10 babyname OP |
11 vincentxue 2015 年 3 月 20 日 对 iOS 开发来说,你这种情况用锁或者依赖都不太适合,如果你是请求数据然后完成展示了才能操作,那你就应该挂个HUD,等数据请求完成,展示出来之后再关掉这个HUD,现在才允许用户做操作。 如果你是内部调用,那就更简单了,调用放在这个请求回调里不就可以了。 |