快速的抽象类和抽象功能

时间:2018-06-23 07:18:16

标签: swift

我来自Java,现在我想在Swift中创建抽象类。

我在 Java 中拥有此类,并且我想尽可能在​​ Swift 中实现相同的功能

abstract class Fetcher
{
    private Item[] items;
    public void fetch()
    {
        //SOME CODE
        parse();
        //SOME CODE
    }

    public abstract void parse();
}

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

1 个答案:

答案 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,因为它已在协议扩展中实现。