Saya port cukup kode dari platform yang mendukung kelas dasar abstrak ke Swift dan menjalankan banyak ini. Jika yang Anda inginkan adalah fungsionalitas dari kelas dasar abstrak, maka itu berarti bahwa kelas ini berfungsi baik sebagai implementasi dari fungsi kelas berbasis bersama (jika tidak, itu hanya akan menjadi antarmuka / protokol) DAN itu mendefinisikan metode yang harus diimplementasikan oleh kelas turunan.
Untuk melakukannya di Swift, Anda memerlukan protokol dan kelas dasar.
protocol Thing
{
func sharedFunction()
func abstractFunction()
}
class BaseThing
{
func sharedFunction()
{
println("All classes share this implementation")
}
}
Perhatikan bahwa kelas dasar mengimplementasikan metode bersama, tetapi tidak mengimplementasikan protokol (karena tidak menerapkan semua metode).
Kemudian di kelas turunan:
class DerivedThing : BaseThing, Thing
{
func abstractFunction()
{
println("Derived classes implement this");
}
}
Kelas turunan mewarisi sharedFunction dari kelas dasar, membantunya memenuhi bagian protokol itu, dan protokol tersebut masih membutuhkan kelas turunan untuk mengimplementasikan fungsi abstrak.
Satu-satunya downside nyata untuk metode ini adalah bahwa karena kelas dasar tidak mengimplementasikan protokol, jika Anda memiliki metode kelas dasar yang membutuhkan akses ke properti / metode protokol Anda harus menimpa bahwa dalam kelas turunan, dan dari sana memanggil kelas dasar (melalui super) yang lewat self
sehingga kelas dasar memiliki instance protokol yang dapat digunakan untuk melakukan tugasnya.
Sebagai contoh, katakanlah bahwa sharedFunction diperlukan untuk memanggil abstractFunction. Protokol akan tetap sama, dan kelas sekarang akan terlihat seperti:
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");
}
}
Sekarang sharedFunction dari kelas turunan memuaskan bagian protokol itu, tetapi kelas turunan masih dapat berbagi logika kelas dasar dengan cara yang cukup mudah.