Swift 如何将方法标记为“必需”`
在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
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中,在我看来覆盖意味着在派生类中重新实现,这具有覆盖父类实现的效果。