Скажем, я вырезал этот код на игровой площадке.
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...
Придирка: это не указатель на функцию, это замыкание. Замыкания реализуются с помощью указателей на функции, хотя и это не всегда так.
Чтобы присвоить закрытие свойству, вы должны удалить круглые скобки
self.funcPointer = self.func1
Последующая ошибка
self' used in method call 'func1' before all stored properties are initialized
можно исправить, объявив funcPointer
неявно развернутый необязательным
internal final var funcPointer: (() -> Void)!
Не могли бы вы также ответить на этот вопрос? stackoverflow.com/questions/56348309/… :)
Вы заметили, что ответы в сообщении, на которое вы ссылаетесь, не вызывают функцию при назначении ее переменной? Это было намеренно.