2016-08-17 10 views
0

私は速やかに新しいです、そして、私は現在イニシャライザについて学んでいます。私は親クラスの初期化子をオーバーライドする問題に遭遇しています。私は特別なバッジクラスはすぐにスーパークラスのプロパティを初期化しようとしていますが、エラーが発生しました

呼び出されたときにコンパイルエラー

「スーパーのinitの前に、プロパティへのアクセス 『ImageTexture』の 『自己』の使用は自己初期化」私は慣れるために新しいイメージをご希望の取得 はこちらを呼び出す前に

self.imageTexture = SKTexture(imageNamed: "BadgeTeal") 

:私はライン上に呼び出すとき、私は

class SpecialBadge: Badge { 

    enum BadgeAnimation: Int { 
     case GrowAndShrink = 0, Rotate, Shake 
    } 

    override init(requestType: UDRequestType) { 

     let animation = BadgeAnimation(rawValue: Int(arc4random_uniform(3))) 
     self.imageTexture = SKTexture(imageNamed: "BadgeTeal") 
     super.init(requestType: requestType) 


     switch animation! { 
     case .GrowAndShrink: 
      growShrink() 

     case .Rotate: 
      rotate() 

     case .Shake: 
      shake() 
     } 
    } 
} 

が、私はエラーを取得し、エラーを取得する特別なバッジのクラス

私の親クラス。

class Badge: SKSpriteNode { 

    var requestType: UDRequestType 
    var imageTexture: SKTexture? 

    init(requestType: UDRequestType) { 
     self.requestType = requestType 

     if let texture = imageTexture { 
      super.init(texture: texture, color: UIColor.clearColor(), size: CGSizeMake(48, 48)) 
     } else { 
      let newTexture = SKTexture(imageNamed: "BadgeMagenta") 
      super.init(texture: newTexture, color: UIColor.clearColor(), size: CGSizeMake(48, 48)) 
     } 
    } 

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

私はそれがSpecialBadgeで初期化子を呼び出す前に別の画像を使用できるようにimageTextureを初期化する方法を見つけ出すことはできません、どんな手助けが大幅

+0

'' let 'のバインディングは、 'imageTexture'にデフォルト値がないので常に失敗します。これは意図的ですか? – Alexander

答えて

2

をいただければ幸いそれは順序の問題ですあなたは物事をする。これは違法である:これは合法です

self.imageTexture = SKTexture(imageNamed: "BadgeTeal") 
super.init(requestType: requestType) 

super.init(requestType: requestType) 
self.imageTexture = SKTexture(imageNamed: "BadgeTeal") 

ルールは、あなたがあなた自身のクラスに特別な何かを行う前に、スーパークラスの初期化を完了しなければならないということです。

+0

私はそのアプローチを試みましたが、私の目標はSKTexture(imageNamed: "BadgeTeal")を使用することでしたが、イニシャライザが呼び出され、imageTextureがnullで、SKTexture(imageNamed: "BadgeMagenta")をBadgeクラスから使用します。バッジクラスイニシャライザ内で使用されているsuper.initをオーバーライドする方法はありますか? – Sam321pbs

+0

問題の内容が表示されません。 'super.init'を最初に呼び出すだけで、それ以降はすべてを行います。 – matt

関連する問題