2015-05-17 13 views
7

Możliwe jest inicjowanie SKNodes z pustym inicjatorem, np. let node = SKNode(). Podklasy SKNode jednak łamią tę funkcjonalność. Po instacji SKNode, Xcode generuje ten błąd, gdy próbuje użyć pusty inicjator na podklasy:Podklasa SKNode generuje błąd: nie można wywołać inicjalizatora dla typu "X" bez argumentów.

Cannot invoke initializer for type "X" with no arguments 

Zakładając SKNodeSubclass jest podklasą SKNode linia let node = SKNodeSubclass() generuje ten błąd.

Is it possible to subclass from SKNode and also use an empty initializer like with SKNode?

class StatusScreen: SKNode { 

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


    init(gridWidth: CGFloat, deviceHeight: CGFloat) { 
     super.init() 

     // Do stuff 
    } 
} 

Odpowiedz

9

Jeśli spojrzeć na The Swift Programming Language: Initialization pod Automatic Initializer Dziedziczenie, jedną z zasad automatycznie dziedziczy wyznaczone incjalizatory nadklasą jest:

If your subclass doesn’t define any designated initializers, it automatically inherits all of its superclass designated initialisers.

Zakłada podać wartości domyślne wszelkie nowe właściwości, które wprowadzasz.

Skoro jesteś definiowanie wyznaczony initialiser init(gridWidth: CGFloat, deviceHeight: CGFloat) swoją podklasę nie dziedziczy init() z SKNode. Dlatego, aby móc korzystać z StatusScreen() trzeba zastąpić init() w swojej klasie StatusScreen:

class StatusScreen: SKNode { 
    // ... 

    override init() { 
     super.init() 

     // Do other stuff... 
    } 
} 

Teraz można użyć:

let node1 = StatusScreen() 
let node2 = StatusScreen(gridWidth: 100, deviceHeight: 100) 

nadzieję, że pomoże!

Powiązane problemy