используйте переменную для хранения функции в swift в качестве функции указателя в Obj-C или C ++ - PullRequest
0 голосов
/ 08 июня 2018

Я пытаюсь создать переменную класса, чтобы потом назначить ей функцию, чтобы позже вызвать эту функцию, просто используя переменную.Идея состоит в том, чтобы иметь возможность изменять функцию, указанную в переменной, когда пользователь нажимает разные кнопки, и вызов выполняется в функции цикла обновления. Все функции, которые я хочу назначить в переменной, находятся в коде, потому что они содержат коды анимации, но разныеи я не хочу использовать переключатель, более эффективно вызывать функцию, как это сделано в Obj-C или C ++ с функцией указателя

объявление класса

private var animationFunction: (TimeInterval)

ошибка наэта строка: Класс 'MenuScene' не имеет инициализаторов

попытаться назначить функцию:

/**** interface ****/
func addInterface()
{
    // couleur de fond et taille de la vue de la pub
    self.backgroundColor = Constants.UI.colorsArray[appDelegate.theme][Constants.UI.C_0101100_COLOR_BACKGROUND]

    // animation
    animationFunction = standardAnimation
}

при назначении строки я получаю эту ошибку: Невозможно назначить значение типа '(TimeInterval) -> () '(aka' (Double) -> () ') для ввода TimeInterval (aka Double)

функция, которую я хочу назначить в переменную класса

func standardAnimation(dtTime: TimeInterval)
{ do something }

С уважениемСедрик

1 Ответ

0 голосов
/ 08 июня 2018

Для устранения ошибки

В классе 'MenuScene' нет инициализаторов

у вас есть два варианта: изменить объявление animationFunction, чтобы сделать его Optional или создайте назначенный инициализатор для MenuScene, где вы присваиваете значение неопциональной функции animationFunction.

Чтобы устранить вторую ошибку несовместимых типов, вам нужно изменить объявление animationFunction, так как в настоящее времяэто тип TimeInterval, а не тип функции.Из сообщения об ошибке кажется, что вам нужна функция типа (TimeInterval)->(), а именно та, которая принимает один входной параметр типа TimeInterval и возвращает Void.

Чтобы исправить обе ошибки, просто измените объявлениеanimationFunction, чтобы сделать его Optional и иметь требуемый тип функции:

private var animationFunction: ((TimeInterval)->())?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...