GameScene does not have a member named spawnPipes

Рейтинг: 0Ответов: 1Опубликовано: 19.11.2014
let spawn = SKAction.runBlock({() in self.spawnPipes()})

Пишет ошибку

GameScene does not have a member named spawnPipes

Как исправить?

Ответы

▲ 1

Такое происходит, когда в первой же строке блока запускаешь функцию или другой блок, который возвращает значение, отличное от описанного в блоке высшего уровня, то есть у runBlock () -> Void тип возвращаемого значения Void, а ваша функция spawnPipes() возвращает что-то иное. В данном случае такая конструкция в принципе неверна, поскольку runBlock вернет Void, а вы пытаетесь записать результаты его выполнения в константу let spawn. То есть по сути let spawn = Void - вряд ли это то, что вам нужно.

Вероятно, нужно что-то типа:

var spawn: SomeType!
SKAction.runBlock { _ in spawn = self.spawnPipes() }

Происходит такая штука потому, что мы можем возвращать из блока значение, не используя слово return, это сделано для упрощения синтаксиса, но нужно следить за типами, например:

let items = [SomeType]()
let filtered = items.filter { $0.type != SomeEnum.concretteType }

Тут слова return нет в принципе, мы можем его написать, но необязательно, во всех блоках тема, очевидно, та же, но это не всегда прозрачно.