Soyut temel sınıfları destekleyen bir platformdan Swift'e makul miktarda kod aktarıyorum ve buna çokça giriyorum. Gerçekten istediğiniz şey soyut bir temel sınıfın işlevselliğiyse, bu, bu sınıfın hem paylaşılan tabanlı sınıf işlevselliğinin bir uygulaması (aksi halde yalnızca bir arabirim / protokol olacaktır) hem de uygulayıcı tarafından uygulanması gereken yöntemleri tanımladığı anlamına gelir. türetilmiş sınıflar.
Bunu Swift'de yapmak için bir protokole ve bir temel sınıfa ihtiyacınız olacak.
protocol Thing
{
func sharedFunction()
func abstractFunction()
}
class BaseThing
{
func sharedFunction()
{
println("All classes share this implementation")
}
}
Temel sınıfın paylaşılan yöntemleri uyguladığını, ancak protokolü uygulamadığını unutmayın (çünkü tüm yöntemleri uygulamaz).
Sonra türetilmiş sınıfta:
class DerivedThing : BaseThing, Thing
{
func abstractFunction()
{
println("Derived classes implement this");
}
}
Türetilmiş sınıf, sharedFunction'ı temel sınıftan miras alır ve protokolün bu bölümünü tatmin etmesine yardımcı olur ve protokol hala türetilmiş sınıfın abstractFunction uygulamasını gerektirir.
Bu yöntemin tek gerçek dezavantajı, temel sınıf protokolü uygulamadığından, bir protokol özelliğine / yöntemine erişime ihtiyaç duyan bir temel sınıf yönteminiz varsa, türetilmiş sınıftaki bunu geçersiz kılmanız ve buradan çağrı yapmanız gerekmesidir. temel sınıf (süper aracılığıyla) geçişi, self
böylece temel sınıf, işini yapmak için protokolün bir örneğine sahip olur.
Örneğin, sharedFunction'ın abstractFunction'ı çağırması gerektiğini varsayalım. Protokol aynı kalacak ve sınıflar artık şöyle görünecekti:
class BaseThing
{
func sharedFunction(thing: Thing)
{
println("All classes share this implementation")
thing.abstractFunction()
}
}
class DerivedThing : BaseThing, Thing
{
func sharedFunction()
{
super.sharedFunction(self)
}
func abstractFunction()
{
println("Derived classes implement this");
}
}
Artık türetilmiş sınıftan paylaşılan işlev, protokolün bu bölümünü karşılamaktadır, ancak türetilmiş sınıf yine de temel sınıf mantığını makul ölçüde basit bir şekilde paylaşabilir.