【问题标题】:Multiple Inheritance in Objective-C or Swift [closed]Objective-C 或 Swift 中的多重继承
【发布时间】:2018-01-31 03:42:28
【问题描述】:

Objective-CSwift 不支持 multiple Inheritance。这是一个众所周知的事实。在 iOS 中,有一些解决方法可以支持 multiple Inheritance。 所以我的问题是为什么 SwiftObjective-C 不支持多重继承?我已经浏览了有关此问题的各种链接,但找不到任何适当的讨论。苹果没有提供这个有什么特别的原因吗?

感谢任何答案,因为我对此一无所知。

【问题讨论】:

  • 你的意思是除了这是一个可怕的想法吗?
  • 我对这个想法持中立立场,此外我只是想知道为什么一开始就不存在多重继承(任何具体原因)。
  • 我会给你一些关键词。阅读 C++ 中的多重继承。阅读钻石问题。阅读为什么必须引入 虚拟继承 来解决它。然后看看通常通过多重继承解决的问题。然后想想 Java 可以通过 interfaces 解决所有这些问题 - 接口而不是实现的多重继承更有意义。 Java 接口在 Swift 中称为 protocols
  • @Sulthan C++ 类是在 Objective C 之后发明的(它是 Smalltalk 的类和对象的直接副本)所以 C++ 在这里无关紧要。
  • @mmmmmm C++ 是最早尝试多重继承的语言之一,因此参考是相关的。多重继承只会带来问题,大多数 C++ 程序员无论如何都不会使用它。我会说接口/协议显然是更简单的设计选择。当然,都是连接到抽象类和方法调用的方式在 Smalltalk/Obj-C 中设计的(消息发送,可以调用不存在的消息)。

标签: ios objective-c swift multiple-inheritance


【解决方案1】:

Swift 支持协议扩展,它可以做很多你通常会使用多重继承的事情。

protocol P {}
protocol Q {}

extension P {
    func foo() {}
}

extension Q {
    func bar() {}
}

struct S: P, Q {} // foo() and bar() can both be called on an instance of S

【讨论】:

  • 我知道有一些解决方法,我只是想知道为什么不支持多重继承??
  • 因为 Swift 团队认为协议扩展是解决这个问题的更好方法。 Swift 对协议扩展的支持基本上多重继承,没有一些问题。
  • 这不是一个解决方法。这就是 Swift 的工作原理。
猜你喜欢
  • 1970-01-01
  • 2011-05-10
  • 2014-04-30
  • 2011-05-28
  • 2011-08-22
  • 1970-01-01
  • 2016-05-16
  • 2014-03-08
相关资源
最近更新 更多