存储带闭包的函数数组

时间:2016-04-25 16:43:54

标签: swift

我的目标是拥有一个接一个地执行的函数数组。

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")
        })
    ]

1 个答案:

答案 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)