Можете ли вы хранить функции в массиве и вызывать их по мере необходимости?

#arrays #swift #function

#массивы #swift #функция

Вопрос:

Я новичок в программировании (1 неделя), так что это, возможно, глупый вопрос, но здесь идет…

Использование Swift (в программе XCode) Я определил некоторые функции (Func1, Func2 и т.д.), Которые принимают массив целых чисел и меняют местами определенные значения внутри массива. Я попытался создать новый отдельный массив, который содержит Func1, Func2 и т. Д., А Затем я хотел бы, основываясь на случайно сгенерированном числе (например, 10204), применять функции по мере необходимости.

Так, например, число 10204 будет применять Func1, Func0, Func2, Func0, Func4 к массиву.

Я пытался искать идеи в других вопросах на этом сайте, но, похоже, ничего не помогает, несмотря на многочисленные попытки. Вот что я пытаюсь сделать — эти две функции манипулируют целыми числами в массиве с именем «cubePos»

 
func UC(){
        (cubePos[0] , cubePos[17])
        =
        (cubePos[17] , cubePos[19])
}

func DC(){
        (cubePos[26] , cubePos[41])
        =
        (cubePos[41] , cubePos[43])
}
 

Обе эти функции отлично работают, когда я применяю их сам. Это то, что мне нужно сделать дальше, определить массив функций:

 var arrOfFuncs = [UC , DC]
 

а затем, учитывая число, например 10110, выполните для «cubePos» эквивалент:

 DC
UC
DC
DC
UC
 

Когда я помещаю что-то вроде:

 arrOfFuncs[0]
 

Я ожидал бы, что код применит UC() к массиву «cubePos», но, похоже, вообще ничего не происходит, несмотря на то, что UC () работает нормально при вводе вручную в код.

Надеюсь, кто-нибудь может помочь!

Ответ №1:

Вы не опубликовали код, который используете в своем вопросе, поэтому я создал базовый образец, который работает. Вы можете попробовать использовать приведенный ниже код.

 func one() {
    print("Hello 1")
}
func two() {
    print("Hello 2")
}

let arr = [one, two]

arr[0]

"10101".forEach {
    arr[Int(String($0))!]()
}
 

Комментарии:

1. Спасибо… На самом деле у меня не было кода, я просто пробовал разные вещи, чтобы посмотреть, смогу ли я заставить его работать, как описано в вопросе. Я попробую и посмотрю, что получится