Как использовать указатель на член функции в swift? - PullRequest
0 голосов
/ 08 сентября 2018

Я пытаюсь переназначить действию новое значение "doo", но я получаю сообщение об ошибке "Невозможно присвоить значение типа '() -> ()" типу "(myClass) -> () -> ( ) '» Как я могу это исправить?

class myClass {

    var action = foo    //function pointer

    var actions = [foo, doo] //function pointer array

    var i = 12


    func foo() {
        print("NOP: \(i)")
    }

    func doo() {
        print("doo: \(i)")
    }

    func change()
    {

        action = actions[1] //this compiles

        //Cannot assign value of type '() -> ()' to type '(myClass) -> () -> ()'
        action = doo    //doesn't compile :(


        //... later:
        action(self)() //call the function pointer
    }

}

1 Ответ

0 голосов
/ 08 сентября 2018

Замените это

action = doo  

на

action = type(of:self).doo // or myClass.doo

Проблема в функции change Вы ссылаетесь на doo функцию относительно self, а не на тип myClass сам

...