Bu yüzden projemde özel bir desen düşünüyordum, ancak işe yaramayacağım. Ana fikir, alt sınıflara özgü arayüze erişmek için her alt sınıfta typealias
'u değiştirmektir.Swift: Alt sınıf içerisindeki typealias'ı geçersiz kılıyor
protocol InstanceInterface: class {
typealias Interface
var interface: Interface { get }
}
// Baseclass
protocol FirstClassInterface: class { /* nothing here for the example */ }
class FirstClass: InstanceInterface, FirstClassInterface {
typealias Interface = FirstClassInterface
var interface: Interface { return self }
}
// Subclass
protocol SecondClassInterface: FirstClassInterface {
func foo()
}
class SecondClass: FirstClass, SecondClassInterface {
typealias Interface = SecondClassInterface // <--- This does nothing :(
func foo() { print("hello world") } // Swift 2.0 here
}
// Lets say I want to call foo trough the interface
let test = SecondClass()
test.interface.foo() // 'Interface' does not have a member named 'foo'
şey yapıyorum yanlış veya bazı Swift kavramlar burada yanlış mı var ?! Burada süper sınıf protokollerinden herşeyi tekrar tekrar uygulamak için alt sınıflara ihtiyacım var. Benim küçük desenim bile mümkün mü? Herhangi bir yardım için minnettar olurum. :)
Şimdi noktayı görüyorum. Ama alt sınıftaki typealias'ı geçersiz kılarsanız hala bir hata veya uyarı olmalı! Demek istediğim, hiçbir şey yapmıyor, örneğiniz için bile, yine de SecondClass içindeki FirstClass'a sadık kalacak mıyım yoksa yine yanlış mıyım? Tipik suşları geçersiz kılma noktası nedir? – DevAndArtist
@DevAndArtist Konu, bir "typealias" ın geçersiz kılınamayacağı ve "SecondClass" gibi aynı ada sahip yeni bir tane ilan ederseniz diğerini gölgelemesidir. Bu, 'T' nin SecondClass'ın farklı bir türü kapsamında olduğunu, ancak 'FirstClass'ın' T'sini değiştirmediğini gösterir. – Qbyte