我来自Java,现在我想用Swift编写抽象类。
我在Java中有这个类,如果可能的话,我想在Swift中使用相同的类。
abstract class Fetcher
{
private Item[] items;
public void fetch()
{
//SOME CODE
parse();
//SOME CODE
}
public abstract void parse();
}所以,有没有办法在Swift中实现同样的目标?我不介意使用任何黑客--这是最后的希望
发布于 2018-06-23 07:33:50
不幸的是,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方法,因为它已经在协议扩展中实现了。
https://stackoverflow.com/questions/50998905
复制相似问题