Невозможно получить доступ к дочерним свойствам SKNode
У меня есть цикл for, который сортирует дочерние элементы SKNode, и по какой-то причине я могу получить доступ только к свойствам дочернего элемента SKNode, но не к свойствам SKSpriteNode, таким как размер, после его приведения.
for tile in map.children where tile is SKSpriteNode {
let tileBody = CGRect(origin: tile.position, size: tile.size)
}
Это говорит о том, что плитка, отлитая как SKSpriteNode, является SKNode. Это все еще действует как SKNode, когда это должно быть SKSpriteNode. Любое исправление к этому?
РЕДАКТИРОВАТЬ
Я просто силой бросил его
let tile = tile as! SKSpriteNode
и это сработало. У меня еще не было проблемы, если вы думаете, что это неправильный способ изложения, я бы хотел услышать это.
1 ответ
https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SKNode_Ref/
Я собираюсь предположить, что "карта" - это SKNode (или его подраздел). Документация проясняет, что свойство children является массивом SKNode только для чтения. Ваше "где - есть" только проверяет, что SKNode является SKSpriteNode, он ничего не разыгрывает.
Как только условие пройдет (потому что текущий итеративный SKNode может быть понижен до SKSpriteNode), вы можете фактически уменьшить его. Это то, что вы делаете сейчас и почему это работает. Вы можете принудительно отключить систему, как сейчас, потому что вы проверяете, является ли это SKSpriteNode заранее.
РЕДАКТИРОВАТЬ: Вот некоторая документация по используемому оператору "is", который является только оператором, который возвращает true или false, он не приводит этот SKNode к SKSpriteNode и делает его доступным во внутренней области видимости.
"Используйте оператор проверки типа (is), чтобы проверить, принадлежит ли экземпляр определенному типу подкласса. Оператор проверки типа возвращает true, если экземпляр принадлежит к этому типу подкласса, и false, если это не так".