SORU
4 AĞUSTOS 2014, PAZARTESİ


Swift: Sınıf'in gerekli üyeleri, üst uygulamıyor

6 beta 5 bugün böyle büyük mükafat için güncelledi ve Apple'ın sınıfların alt sınıflar benim neredeyse tüm hataları aldım fark ettim.

Hata durumları:

'X' üst uygulamıyor gerekli üyeleri . sınıf

Sonrası kolay olacak bu sınıf şu anda çok hafif olduğu için seçtiğim bir örnek.

class InfoBar: SKSpriteNode  { //Error message here

    let team: Team
    let healthBar: SKSpriteNode

    init(team: Team, size: CGSize) {
        self.team = team
        if self.team == Team.TeamGood {
            healthBar = SKSpriteNode(color: UIColor.greenColor(), size:size)
        }
        else {
            healthBar = SKSpriteNode(color: UIColor.redColor(), size:size)
        }
        super.init(texture:nil, color: UIColor.darkGrayColor(), size: size)

        self.addChild(healthBar)

    }

}

Benim sorum, neden bu hatayı alıyorum, bunu nasıl düzeltebilirim? Uygulanması değilim? Belirlenmiş bir başlatıcı arıyorum.

CEVAP
4 AĞUSTOS 2014, PAZARTESİ


Bir Apple Geliştirici Forumları çalışan:

"Derleyici bildirmek için bir yol ve inşa programı gerçekten uyumlu NSCoding olmak istemiyorum böyle bir şey yapmak:"

required init(coder: NSCoder) {
  fatalError("NSCoding not supported")
}

Eğer uyumlu NSCoding olmak istemediğini biliyorum, bu bir seçenek. Bir film şeridi yükleniyor olmayacağım biliyorum SpriteKit benim kod bir sürü ile bu yaklaşım kiraladım.


Oldukça iyi işler çıkarabilirsin başka bir seçenek gibi bir kolaylık ınıt yöntemi uygulamak için:

convenience required init(coder: NSCoder) {
    self.init(stringParam: "", intParam: 5)
}

self bir başlatıcı için aramayı unutmayın. Bu sadece ölümcül bir hata atmak kaçınırken, isteğe bağlı olmayan tüm özellikleri farklı olarak parametreler için kukla değerleri kullanmak için izin verir.


Tabii ki üçüncü seçenek süper arama yöntemi uygulamak ve isteğe bağlı olmayan özelliklerinizin tüm yapmaktır. Eğer nesne bir görünüm bir film şeridi yükleniyor, eğer bu yaklaşım almalı:

required init(coder aDecoder: NSCoder!) {
    foo = "some string"
    bar = 9001

    super.init(coder: aDecoder)
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Charles Renaud

    Charles Rena

    10 Kasım 2007
  • TheGamer2323

    TheGamer2323

    25 Ocak 2009
  • vgeller1

    vgeller1

    22 Kasım 2009