Asynchronous 在Swift中异步发出未知数量的URL请求
我需要通过发出异步URL请求来遍历节点数未知的树。我目前的做法如下:Asynchronous 在Swift中异步发出未知数量的URL请求,asynchronous,recursion,swift2,closures,tree-traversal,Asynchronous,Recursion,Swift2,Closures,Tree Traversal,我需要通过发出异步URL请求来遍历节点数未知的树。我目前的做法如下: class Parent { var foo: String var id: Int var children: [Child]? func loadChildren() { for child in self.children { self.getAllChildren(child) } } func getAl
class Parent {
var foo: String
var id: Int
var children: [Child]?
func loadChildren() {
for child in self.children {
self.getAllChildren(child)
}
}
func getAllChildren(current: Child) {
current.load() {(success) in
if (success) {
if let children = current.children {
for child in children {
self.getAllChildren(child)
}
}
}
}
}
}
class Child {
var bar: String
var id: Int
var children: [Child]?
func load(success: (Bool) -> ()) {
// Load from API and initalize values
}
}
func loadChildren(success: (Bool) -> ()) {
// do stuff
}
我目前上述方法的问题是,我不知道加载何时完成。我不在乎是否有一些孩子加载失败,但我需要在父母的所有孩子(以及他们的孩子)加载完毕后进行UI更新
我研究过各种各样的方法,比如承诺和派遣小组,但我正在努力让它发挥作用。我使用的是Swift 2,理想情况下,父级将具有如下功能:
class Parent {
var foo: String
var id: Int
var children: [Child]?
func loadChildren() {
for child in self.children {
self.getAllChildren(child)
}
}
func getAllChildren(current: Child) {
current.load() {(success) in
if (success) {
if let children = current.children {
for child in children {
self.getAllChildren(child)
}
}
}
}
}
}
class Child {
var bar: String
var id: Int
var children: [Child]?
func load(success: (Bool) -> ()) {
// Load from API and initalize values
}
}
func loadChildren(success: (Bool) -> ()) {
// do stuff
}