gpt4 book ai didi

inheritance - Swift 语言中的抽象类

转载 作者:行者123 更新时间:2023-11-28 07:29:03 25 4
gpt4 key购买 nike

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

最佳答案

Swift 中没有抽象类(就像 Objective-C 一样)。你最好的选择是使用 Protocol ,这就像一个 Java 接口(interface)。

在 Swift 2.0 中,您可以使用协议(protocol)扩展添加方法实现和计算属性实现。您唯一的限制是您不能提供成员变量或常量并且没有动态调度

这种技术的一个例子是:

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

请注意,这甚至为结构提供了类似于“抽象类”的功能,但类也可以实现相同的协议(protocol)。

另请注意,每个实现 Employee 协议(protocol)的类或结构都必须再次声明 annualSalary 属性。

最重要的是,请注意没有动态调度。当在存储为 SoftwareEngineer 的实例上调用 logSalary 时,它会调用该方法的覆盖版本。当 logSalary 在被转换为 Employee 后在实例上调用时,它会调用原始实现(它不会动态分派(dispatch)到覆盖版本,即使instance 实际上是一个软件工程师

有关详细信息,请查看有关该功能的精彩 WWDC 视频:Building Better Apps with Value Types in Swift

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com