저는 Swift를 사용하여 간단한 게임을 만들려고합니다. 게임은 다른 레벨을 가지고 있으며, 각 레벨은 게임이 약간 다른 방식으로 행동해야합니다. 각 레벨마다 다른 클래스를 사용하기로 결정했습니다. 모두 기본 레벨 클래스에서 상속되었습니다.Swift 클래스의 재정의를위한 옵션 기능?
import SpriteKit
class LevelBase {
var scene: GameScene! // Seems very dodgy
var blocks = [SKSpriteNode]()
init(scene: GameScene) { // Should this be required init?
self.scene = scene
}
func filterBlock(_ block: SKSpriteNode) {
blocks = blocks.filter() { $0 !== block } // Looks really dodgy to me
}
func update(time: TimeInterval) {
// For override
}
func levelUp() {
// For override
}
func postGenerate() {
// For override
}
}
그러나, 나에게,이 클래스가 매우 심하게 기록 될 것으로 보인다 :
이
은 기본이다. 클래스에서 작성된 함수를 어디에서든지 찾을 수는 없으므로 잘못된 작업을한다고 생각합니다. 그런 옵션 기능을 위해 확장 기능이나 프로토콜을 사용해야합니까? 나는 그들이 어떻게 작동하는지 잘 모른다. 그래서 나는 지금까지 아무 것도 사용하지 않았다.두 번째 문제는이 클래스를 게임 장면 변수로 초기화해야한다는 것입니다. 일부 수준에서는 스프라이트를 추가하거나 제거해야하기 때문입니다. 게임 장면의 파일에 클래스가 생성되어 있다는 점을 감안할 때 특히 위험한 것처럼 보입니다.
분명히 좋은 방법이 있습니까?
처럼 만들 수. 일치하는 형식은이 기본 동작을 사용하거나 직접 구현할 수 있습니다. – Alexander
문제가있는 개체를 인스턴스화 할 수있는 (최종) 수준의 클래스를 갖고 싶습니다. – vikingosegundo
https://en.wikipedia.org/wiki/Composition_over_inheritance – vikingosegundo