Моя цель состоит в том, чтобы иметь ряд функций, которые выполняются один за другим.хранить массив функций с закрытием
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")
})
]
В чем смысл создания перечисления? Будет ли проще, если вы просто поместите функции в массив? –
Я ссылался на этот вопрос http://stackoverflow.com/questions/24418951/array-of-functions-in-swift – prawn
Ребята использовали перечисление в этом вопросе, потому что подписи функций были разными. У вас, как я вижу, есть те же подписи, поэтому вы можете хранить их в массиве напрямую. –