首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >抽象类与抽象函数

抽象类与抽象函数
EN

Stack Overflow用户
提问于 2018-06-23 07:18:16
回答 1查看 2.8K关注 0票数 3

我来自Java,现在我想用Swift编写抽象类。

我在Java中有这个类,如果可能的话,我想在Swift中使用相同的类。

代码语言:javascript
复制
abstract class Fetcher
{
    private Item[] items;
    public void fetch()
    {
        //SOME CODE
        parse();
        //SOME CODE
    }

    public abstract void parse();
}

所以,有没有办法在Swift中实现同样的目标?我不介意使用任何黑客--这是最后的希望

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-23 07:33:50

不幸的是,Swift不支持抽象类和方法。

为了达到类似的效果,我们在Swift中使用协议(Java中的接口)。

所以你们班的一个例子是:

代码语言:javascript
复制
protocol Fetcher {
    var items: [Item] { get set }
    func fetch()
    func parse()
}

您可以做的一件事是标记类final的成员,以防止它们在子类中被重写。

如果您想要一个函数的默认实现,可以扩展您的协议:

代码语言:javascript
复制
extension Fetcher {
    func fetch() {
        //SOME CODE
        parse()
        //SOME CODE
    }
}

在其中,您不需要在目标类中实现这一点。

例如,使用上面的协议:

代码语言:javascript
复制
class Foo: Fetcher {
    var items = [Item]()

    // No need for fetch method, since it's already implemented

    func parse() {
       // Do something
    }
}

注意,上面的实现不包含fetch方法,因为它已经在协议扩展中实现了。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50998905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档