2016-03-25 5 views
2

aşağıdaki varsayalım.Başlatıcıda İşlev Kullan - Swift?</p> <pre><code>class A { let x : Int init() { self.x = assign(1) } func assign(y : Int) -> Int { return y } } </code></pre> <p>Bu, hata üretir:

İşte sorum şu: sınıf başlatıcısı içindeki işlevleri çağırmanın bir yolu var mı?

DÜZENLEME: Eklenen hata iletisi: kayıtlı tüm özelliklerinin öncesine yöntem çağrısı 'Ata' in 'öz' bir

kullanım

+0

Aldığınız istisna/hata nedir? Gerçek sonucu görmek için yararlı olurdu – konkked

+0

Birden fazla çözüm vardır ama gerçek bir kullanım durumu yardımcı olacaktır. – Sulthan

cevap

1

başlatılır ben büyük çözüm değil ama yine de düşünmek çalışıyor.

class A { 
     var variable : Int 

     init() { 

      self.variable = A.assign(1) 

     } 

     private class func assign(y : Int) -> Int { 
      return y 
     } 
    } 
+0

Çalışıyor, teşekkürler. Merak etme, önceki yönteme rağmen bu neden işe yarar? –

+0

bir sınıf fonksiyonudur ve bu tür bir fonksiyon nesnenin başlatılmasına gerek yoktur veya @Sulthan derinlemesine açıklayabilir –

0

Sen gibi birşeyler kullanabilirsiniz:

class A { 
    var x : Int! 
    init() { 
     x = assign(1) 
    } 
    func assign(y : Int) -> Int { 
     return y 
    } 
} 

Bu yaklaşımın olumsuz x erişmek ve onu başlatıldı değilse bir çalışma zamanı hatası alırsınız olmasıdır. this cevabına bakın.

+0

Ne sağlar x! x çalışırken değil çalışmak için? –

+0

Çalışıyor, çünkü artık 'x' isteğe bağlı olduğundan hata artık geçerli değil. Artık depolanmış özelliklerin ilklendirilmesinden önce 'self'i kullanmıyorsunuz, çünkü artık bu tür özelliklere sahip değilsiniz, artık isteğe bağlılar. – Jelly

1

örneği başlatılır kadar (init yapılır önce) Sen örnek yöntemleri diyemezsin, ancak class veya static anahtar sözcüğü ile tanımlanan modül düzeyi fonksiyonları ve type methods kullanabilirsiniz.

func compute(y: Int) -> Int { 
    return y 
} 

class A { 
    let x: Int 

    static func assign(y: Int) -> Int { 
    return y 
    } 

    init() { 
    x = A.assign(3) + compute(4) 
    } 
} 
İlgili konular