我来自Java,现在我想在Swift中创建抽象类。
我在 Java 中拥有此类,并且我想尽可能在 Swift 中实现相同的功能
abstract class Fetcher
{
private Item[] items;
public void fetch()
{
//SOME CODE
parse();
//SOME CODE
}
public abstract void parse();
}
所以,有没有办法在Swift中实现相同的目标?我不介意使用任何技巧,这是最后的希望
答案 0 :(得分:4)
不幸的是,Swift不支持抽象类和方法。
为达到类似的效果,在Swift中,我们使用协议(Java中的接口)。
因此,您的课程示例为:
protocol Fetcher {
var items: [Item] { get set }
func fetch()
func parse()
}
您可以做的一件事就是标记类final
的成员,以防止其在子类中被覆盖。
如果您想要其中一项功能的默认实现,则可以扩展协议:
extension Fetcher {
func fetch() {
//SOME CODE
parse()
//SOME CODE
}
}
您无需在目标类中实现它。
例如,使用上述协议:
class Foo: Fetcher {
var items = [Item]()
// No need for fetch method, since it's already implemented
func parse() {
// Do something
}
}
请注意,上述实现不包含方法fetch
,因为它已在协议扩展中实现。