有没有一种方法可以用Swift语言创建一个抽象类,或者这和Objective-C一样是一个限制?我想创建一个抽象类,与Java定义的抽象类类似。

最佳答案

Swift中没有抽象类(就像Objective-C一样)。您最好的选择是使用Protocol,它就像一个Java接口。
使用Swift 2.0,您可以使用协议扩展添加方法实现和计算属性实现。唯一的限制是不能提供成员变量或常量,并且没有动态分派。
这种技术的一个例子是:

protocol Employee {
    var annualSalary: Int {get}
}

extension Employee {
    var biweeklySalary: Int {
        return self.annualSalary / 26
    }

    func logSalary() {
        print("$\(self.annualSalary) per year or $\(self.biweeklySalary) biweekly")
    }
}

struct SoftwareEngineer: Employee {
    var annualSalary: Int

    func logSalary() {
        print("overridden")
    }
}

let sarah = SoftwareEngineer(annualSalary: 100000)
sarah.logSalary() // prints: overridden
(sarah as Employee).logSalary() // prints: $100000 per year or $3846 biweekly

注意,这甚至为结构提供了类似“抽象类”的特性,但是类也可以实现相同的协议。
还要注意,实现Employee协议的每个类或结构都必须再次声明annualSalary属性。
最重要的是,注意没有动态调度。当对存储为logSalary的实例调用SoftwareEngineer时,它将调用方法的重写版本。当实例被转换为logSalary后对其调用Employee时,它调用原始实现(即使实例实际上是Software Engineer,它也不会动态分派到重写版本)。
有关详细信息,请查看有关该功能的精彩WWDC视频:Building Better Apps with Value Types in Swift

关于inheritance - Swift语言中的抽象类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55581608/

10-13 04:37