Hat*_*r J 7 oop abstract-class ios swift
Swift没有抽象的类和方法.相反,它提供协议.
当你的课程完全抽象或完全具体时,这很好.
但是,实现具有具体方法的抽象类的最佳'Swift'方法是什么?
伪代码示例:
class Animal {
abstract makeSound()
abstract eyeCount()
}
class Mammal : Animal {
override eyeCount { return 2 } // Let's assume all mammals have hard-coded 2 eyes...
class Cat : Mammal {
override makeSound { print "Meow!" }
}
class Dog : Mammal {
override makeSound { print "Woof!" }
}
Run Code Online (Sandbox Code Playgroud)
在哺乳动物中,我确实想要实施具体的方法,eyeCount()
因为所有哺乳动物都有2个硬编码的眼睛(据说是),我不想在狗和猫中重新实施它.然而,makeSound()
只应该为狗和猫实施,因为哺乳动物有不同的声音.
你会如何在Swift中实现它?谢谢!
我会像这样实现它:
class AbstractAnimal
{
// Fully abstract method
func methodThatReturnsSomething() -> String {
fatalError("methodThatReturnsSomething() is abstract and must be overriden!");
}
func eyeCount() -> Int {
return 2;
}
}
Run Code Online (Sandbox Code Playgroud)
fatalError
防止Xcode抱怨抽象方法methodThatReturnsSomething()
实际上没有返回任何东西.
您可以使用Protocol Extensions获得与Abstract Classes完全相同的行为:检查抽象方法是否在编译时在子类中实现.
protocol Entity {
// MARK: - Abstract methods
func filename() -> String
// MARK: - Traits
func saveData(data: NSArray)
}
extension Entity {
func saveData(data: NSArray) {
// Do something and call:
let filename = filename()
}
}
Run Code Online (Sandbox Code Playgroud)
现在,您可以Entity
在子类上实现协议,编译器将强制您filename()
在saveData()
方法已实现时实现.
归档时间: |
|
查看次数: |
2395 次 |
最近记录: |