【发布时间】:2017-09-19 18:29:51
【问题描述】:
我正在尝试实现 NSOperationQueue 在 swift 3 中完成所有任务操作。我创建了一个下面的演示代码,它按照我的预期工作。
func downloadTopStroiesDetails(){
let operationQueue: OperationQueue = OperationQueue()
let operation1 = BlockOperation() {
print("BlockOperation1")
for id in 0...5{
operationQueue.addOperation(downloadArticle(index: id))
}
let operation2 = BlockOperation() {
print("BlockOperation2")
}
operationQueue.addOperation(operation2)
}
operationQueue.addOperation(operation1)
}
func downloadArticle(index:Int) -> Operation {
let operation: Operation = BlockOperation { () -> Void in
print(index)
}
return operation
}
downloadTopStroiesDetails() // start calling
输出:
BlockOperation1
0
1
2
3
4
5
BlockOperation2
但是当我在 downloadArticle 方法中使用 Alamofire 调用 Web API 时,输出是不同的。
func downloadArticle(index:Int) -> Operation {
let operation = BlockOperation(block: {
RequestManager.networkManager.fetchFromNetworkwithID(articleid: index) { (response:Any ,sucess:Bool) in
if sucess{
print(index)
//let art = article.init(json:(response as? json)!)!
// self.saveDataIntoCoreData(data: art)
//self.all_TopArticle.append(art)
}
};
})
return operation
}
现在输出:
BlockOperation1
BlockOperation2
0
1
2
3
4
5
我在这里做错了什么?
【问题讨论】:
-
你没有做错什么。并发操作队列的输出是预期的。
标签: ios swift nsoperation nsoperationqueue