2015-06-15 18 views
12

Protokol uzantıları aracılığıyla bir protokole varsayılan başlatıcı eklemenin bir yolunu arıyorum.Swift protokolü uzantısı init ile kendi kendine referans sorunları

Benim protokoldür: Ben uzantısı üzerinden çalışırsanız Ancak bu protokol I için varsayılan bir başlatıcı yapmak için

struct TestStruct : TestProtocol { 
    var myVar : Double 

    init(value : Double) { 
     myVar = value 
    } 

    init (existingStruct : TestProtocol) { 
     myVar = existingStruct.myVar 
    } 
} 

:

protocol TestProtocol { 
    var myVar : Double { get set } 
    init(value: Double) 
    init(existingStruct : TestProtocol) 
} 

Ben bu protokolü kullanarak bir yapı uyguladık öz sorunları çalıştırmak:

extension TestProtocol { 
    init(value : Double) { 
     myVar = value 
    } 

    init(existingStruct : TestProtocol) { 
     myVar = existingStruct.myVar 
    } 
} 

Whe Her iki atama hatları yeniden bu işi yapmak için bir yolu var mı

başlatıldı önce referans olarak geçirilen hata Değişken 'self' sorunu - ya da ben sınıfları kullanarak sınırlı mıyım?

enter image description here

+0

Bu xcode, monokai temasıyla mı? Onu istiyorum! <3 – Kutyel

+0

https://github.com/b0ti/xcode-monokai-revisited – Jeef

+3

Ups, 'TestProtocol' u benimseyen somut türün, protokol uzantısındaki init 'ler tarafından tamamen başlatılacağını nasıl garanti edersiniz? özellikle değer türleri için (ör: yapılar veya enumlar). –

cevap

23

Sorunuz neredeyse dün cevap bu post aynıdır. İşte

bu
protocol TestProtocol { 
    var myVar : Double { get set } 
    init() // designated initializer which will ensure that your class or structer type will instantiate correctly 
} 

struct TestStruct : TestProtocol { 
    var myVar : Double 

    init() { 
     myVar = 0 
    } 
} 

extension TestProtocol { 
    init(value : Double) { 
     self.init() 
     myVar = value 
    } 

    init(existingStruct : TestProtocol) { 
     self.init() 
     myVar = existingStruct.myVar 
    } 
} 

İyi günler :) çözmek için hile. :) Protokol uzantısı çok güzel.

+3

Sana da iyi günler. – user1447414

İlgili konular