Swift 3: Невозможно вызвать значение нефункционального типа '(() -> Void)?'
Эта функция работала до проклятия всех проклятий, также известных как Swift 3. После перехода на Swift 3, моя дружественная и приятная среда IDE, Xcode отображает эту разочаровывающую ошибку в строке SCNTransaction.completionBlock
:
Не удается вызвать значение нефункционального типа '(() -> Void)? "
Несколько других сообщений имеют дело с подобными ошибками, но ни одно из этих решений не применимо.
Что не так с линией???
func test(_ block: SCNNode, animated: Bool) {
// Do stuff
SCNTransaction.begin()
SCNTransaction.animationDuration = animated ? AnimationDur : 0.0
SCNTransaction.completionBlock {
block.removeFromParentNode()
}
// Animate stuff
SCNTransaction.commit()
}
2 ответа
Решение
SCNTransaction.completionBlock является свойством класса. Возможно, вы имеете в виду это?
// ↓
SCNTransaction.completionBlock = {
block.removeFromParentNode()
}
SCNTransaction.completionBlock
это не функция, которую вы можете вызывать через синтаксис конечного замыкания, это свойство. Вам нужно назначить закрытие для него:
SCNTransaction.completionBlock = {
block.removeFromParentNode()
}
Другими словами, вам просто нужно добавить знак равенства.