Как инициализировать и использовать указатель на функцию в Swift - PullRequest
1 голос
/ 28 мая 2019

Допустим, у меня есть этот код на детской площадке

import UIKit

internal final class TestClass {
    internal final var funcPointer: () -> Void

    init() {
        self.funcPointer = self.func1() //Cannot assign value of type '()' to type '() -> Void'
    }

    internal final func func1() {
        print("func1 is called!")
    }
}

var testClass: TestClass = TestClass()
testClass.funcPointer()

Почему я получаю отображаемое сообщение об ошибке в методе init () и как правильно инициализировать указатель функции?

Я уже видел этот SO пост и этот учебник, но в любом случае я не могу заставить его работать для (Void) -> Void функции ...

1 Ответ

2 голосов
/ 28 мая 2019

Чтобы присвоить замыкание свойству, необходимо удалить скобки

self.funcPointer = self.func1

последующая ошибка

self 'используется в вызове метода' func1 'до инициализации всех сохраненных свойств

можно исправить, объявив funcPointer неявное развертывание необязательным

internal final var funcPointer: (() -> Void)!
...