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()
}

Другими словами, вам просто нужно добавить знак равенства.

Другие вопросы по тегам