Как получить доступ к методам подкласса SKNode из массива SKNode.children? - PullRequest
0 голосов
/ 10 мая 2019

У меня есть сцена с несколькими дочерними элементами, которые относятся к подклассам SKNodes. Я пытаюсь получить доступ к методу для каждого из дочерних узлов, но получаю сообщение об ошибке «Значение типа« SKNode »не имеет члена« [имя члена] ».

Все на Swift 5 на Xcode 10.2 (если это актуально?).

import SpriteKit

class GameScene: SKScene {

    override func didMove(to view: SKView) {

        let slim = NamedNode(name: "Slim Shady")
        let snoop = NamedNode(name: "Snoop Dog")
        let shaggy = NamedNode(name: "Shaggy")

        self.addChild(slim)
        self.addChild(snoop)
        self.addChild(shaggy)

        for child in self.children {
            child.whatsMyName()   
            // ERROR: Value of type 'SKNode' has no member 'whatsMyName'
        }
    }
}


class NamedNode: SKNode {

    var standup = false

    init(name: String) {
        super.init()
        self.name = name
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    func whatsMyName() {
        print("My name is ", name as Any)
        if self.name == "Slim Shady" {
            standup = true
        }
    }
}

Как я могу получить доступ к этим методам из массива Scene.children? Это возможно или я должен изменить такт?

Спасибо!

1 Ответ

0 голосов
/ 10 мая 2019

Здесь сказано, что

Дочерние элементы SKScene относятся к типу SKNode.Вы хотите получить доступ к свойству подкласса SKNode.Во время компиляции дети рассматриваются как SKNodes.Вы должны попытаться разыграть своего ребенка, что-то вроде

для ребенка в self.children {(child as? NamedNode) .whatsMyName ()}

Имейте в виду, что даункингобычно это кодовый запах.

...