Swift中的抽象方法?

Pet*_*nek 11 abstract-class abstract swift

关于抽象类的概念,我对Swift开发人员的问题很少.

  1. 你如何在Swift中定义一个抽象类?有没有办法阻止类被实例化,同时为其子类提供初始化器?
  2. 如何定义抽象方法,同时实现其他方法?在定义抽象方法时,Apple通常会将您指向协议(接口).但是他们只解决了我问题的第一部分,因为他们定义的所有方法都是抽象的.当你想在你的班级中同时使用抽象和非抽象方法时,你会怎么做?
  3. 仿制药怎么样?您可能已经考虑过将协议与扩展(类别)一起使用.但是,再有就是使用泛型,因为协议不能有泛型类型,只有一个问题类型别名.

我已经做了我的功课,我知道使用方法,如解决这些问题fatalError()preconditionFailure()在超,然后在基类中重写它们.但这对我来说似乎是丑陋的对象设计.

我发布这个的原因是要找出是否存在更普遍和通用的解决方案.

提前谢谢,彼得.

Gui*_*gis 8

截至今天(2016年4月7日),向Swift(SE-0026)引入抽象类和方法的提议已被推迟.

Joe Groff在 2016年3月7日的swift-evolution-announce中发布了以下内容:

该提议已经从Swift 3推迟.讨论的重点是抽象类是否适合作为"协议导向"语言的Swift方向.除了任何宗教教条,Swift打算成为一种实用的语言,让用户完成工作.今天的事实是,Swift的主要目标平台之一是依赖于继承的Cocoa框架,并且Swift 2的协议在几个方面都缺乏抽象类[...].

一旦Swift 3的核心目标得到解决,我们想重新考虑这个特性,因此我们可以在更完整的泛型实现的背景下更准确地考虑它的价值,因此我们可以解决其设计的更精细的问题.

我鼓励您阅读完整的电子邮件,但我认为结论与您在问题中提出的结论相同:我们目前仍然坚持使用Objective-C做事方式(提出异常).