Swift 如何将方法标记为“必需”`

Swift 如何将方法标记为“必需”`,swift,swift5.1,Swift,Swift5.1,在swift中,我可以将初始化器标记为required,以便派生类必须重写它。如何对普通实例方法执行相同的操作?将其标记为required会引发编译器错误 class A { let a : Int required init(a:a) { self.a = a } // compiler error required func f() -> Int { return 2 } } 我能想到的唯一解决办法是: func f() -> Int

在swift中,我可以将初始化器标记为
required
,以便派生类必须重写它。如何对普通实例方法执行相同的操作?将其标记为
required
会引发编译器错误

class A {
  let a : Int
  required init(a:a) {
    self.a = a
  }
  // compiler error
  required func f() -> Int {
     return 2
  }
}
我能想到的唯一解决办法是:

func f() -> Int {
  fatalError("Should always be overriden")
}

但这并不令人满意,因为它是运行时检查,而不是编译时检查。

Swift中不存在此功能

不能强制子类重写方法


然而 Swift中不存在此功能

不能强制子类重写方法


然而 您误解了
必需的
的含义
required
不强制您重写初始值设定项,它要求存在初始值设定项

初始值设定项并不总是继承的。例如,如果创建一个新的指定初始值设定项,则不会继承初始值设定项中的超类
required
初始值设定项强制您在这种情况下定义一个

这不能发生在普通方法中,因为它们总是被继承的。这就是为什么不存在方法的
required


您正在寻找抽象(或C++中的纯虚拟)方法,这是Swift中不存在的概念。

您误解了
所需的
的含义
required
不强制您重写初始值设定项,它要求存在初始值设定项

初始值设定项并不总是继承的。例如,如果创建一个新的指定初始值设定项,则不会继承初始值设定项中的超类
required
初始值设定项强制您在这种情况下定义一个

这不能发生在普通方法中,因为它们总是被继承的。这就是为什么不存在方法的
required


您正在寻找抽象(或C++中的纯虚拟)方法,这是Swift中不存在的概念。

所需的init方法并不意味着必须在子类中重写该方法。这只意味着该方法是指定的初始值设定项,必须用于创建实例。
fatalError
方法是强制子类重写该方法的唯一方法。必需的init方法并不意味着必须在子类中重写该方法。这只意味着该方法是指定的初始值设定项,必须用于创建实例。
fatalError
方法是强制子类重写方法的唯一方法。这是完美的,正是我想要的。不确定我是否同意“您想要强制子类实现(而不是重写)”。在swift中,在我看来覆盖意味着在派生类中重新实现,这具有覆盖父类实现的效果。这是完美的,正是我想要的。不确定我是否同意“您想要强制子类实现(而不是重写)”。在swift中,在我看来覆盖意味着在派生类中重新实现,这具有覆盖父类实现的效果。