我的目标是拥有一个接一个地执行的函数数组。
static func GetData(success:(() ->())?, failure:((response : NSURLResponse, error : NSError) ->())?){
//do something asynchronous. make web service call
success?()
//or
failure?(response: urlResponse, error: errorThrown)
}
然后在视图控制器中,我尝试在数组中存储与上面类似的函数。我的目标是迭代这个数组并一个接一个地执行这些函数。原因是因为每个函数都依赖于从前一个函数返回的数据。
所以我做了一个枚举
enum MyEnum {
case GetData()
case GetData2()...and so on
//and every other function is put here
}
现在在我的视图控制器中,我将其添加到数组
funcs.append(MyEnum.GetData(DataAccess.GetData({
//do stuff
}, failure: { (response, error) in
})))
funcs.append(MyEnum.GetData2(DataAccess.GetData2({
//do stuff
}, failure: { (response, error) in
})))
但是,每当我存储一个函数时,它会自动执行。如果没有任何关闭,我想我可以做到,但我需要它们来确定如何继续。
有更好的方法吗?我错过了什么吗?
使用闭包存储一系列函数会自动执行它们
var arrayOfFuncs = [
DataAccess.GetData1({
print("success")
}, failure: { (response, error) in
print("failure")
}),
DataAccess.GetData2({
print("ok")
}, failure: { (response, error) in
print("ee")
})
]
答案 0 :(得分:1)
GetData需要2个闭包作为参数,它不是两个闭包。我不知道你在用枚举做什么。
typealias Block = () -> Void
typealias Error = (NSURLResponse,NSError) -> Void
var funcs = [(Block,Error)]
func.forEach{ f => f._0() } // call success()
// Or you could do this
typealias Getter = (Block,Error) -> Void
var funcs2 = [Getter]
funcs2.append(DataAccess.GetData)