【发布时间】:2016-03-28 20:11:07
【问题描述】:
我正在尝试下一个:
- 我收到 Alamofire 的响应,填写一个数组
- 打印这个数组
为此我做了:
var queue = NSOperationQueue()
let firstOperation = NSBlockOperation(block: {
let getMyProfileURL = "\(self.property.host)\(self.property.getMyProfile)"
Alamofire.request(.POST, getMyProfileURL, parameters: self.userParameters.profileParameteres, encoding: .JSON).responseJSON { response in
do {
let json = JSON(data: response.data!)
print(json)
if json["user"].count > 0 {
self.profileDetails.append(ProfileDetailsModel(json: json["user"]))
}
}
}
})
firstOperation.completionBlock = {
print("firstOperation completed")
}
queue.addOperation(firstOperation)
let secondOperation = NSBlockOperation(block: {
print(self.profileDetails)
})
secondOperation.addDependency(firstOperation.completionBlock)
secondOperation.completionBlock = {
print(self.profileDetails)
}
queue.addOperation(secondOperation)
因此,理论上,首先它需要填充我的数组,完成此任务(块),然后再打印这些数组。但我明白了:
firstOperation completed
[] -> self.profileDetails from the secondOperation
[] -> self.profileDetails from the secondOperation completion block
and just here I get my JSON from the Alamofire 'do' block
那么,我做错了什么?以及如何解决它以使其按我的意愿工作?
【问题讨论】:
-
您的块在请求发出后立即返回(因此操作完成),它不会等待异步调用返回。
-
有什么解决办法吗?我想在开始打印之前获得完整的数组@dan
标签: ios swift concurrency nsoperation nsoperationqueue