如何将方法标记为“必需”
How can I mark a method `required`
在 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 中不存在。
您不能强制子class覆盖方法。
然而...
你说这是你能找到的最好的代码来实现你想要的,但你不喜欢在运行时移动错误。
func f() -> Int {
fatalError("Should always be overriden")
}
看看这个方法,你似乎想强制一个子class来实现(而不是覆盖)一个方法。
摘要Class
您可能正在寻找类似于抽象概念的东西 Class 在其他编程语言中可用。
基础Class + 协议
如果这正是您要寻找的,那么您可以在 Swift.
中实现类似的目标
class AnimalBase {
let name: String
init(name: String) {
self.name = name
}
}
protocol Animal: AnimalBase {
func move()
}
现在,如果您尝试像这样定义 class
class Dog: Animal {
}
编译器会强制你继承自AnimalBase
class Dog: AnimalBase, Animal {
}
最后为 move()
方法
提供一个实现
class Dog: AnimalBase, Animal {
func move() {
print("")
}
}
您误解了 required
的意思。 required
不会强制您覆盖初始化程序,它需要初始化程序 存在 .
初始化器并不总是被继承的。例如,如果您创建一个新的指定构造器,那么超类构造器将不会被继承。 required
在这种情况下,初始化程序会强制您定义一个。
普通方法不会发生这种情况,因为它们总是被继承的。这就是 required
方法不存在的原因。
您正在寻找 abstract(或 C++ 中的 pure virtual)方法,这是 [=28 中不存在的概念=].
在 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 中不存在。
您不能强制子class覆盖方法。
然而...
你说这是你能找到的最好的代码来实现你想要的,但你不喜欢在运行时移动错误。
func f() -> Int {
fatalError("Should always be overriden")
}
看看这个方法,你似乎想强制一个子class来实现(而不是覆盖)一个方法。
摘要Class
您可能正在寻找类似于抽象概念的东西 Class 在其他编程语言中可用。
基础Class + 协议
如果这正是您要寻找的,那么您可以在 Swift.
中实现类似的目标class AnimalBase {
let name: String
init(name: String) {
self.name = name
}
}
protocol Animal: AnimalBase {
func move()
}
现在,如果您尝试像这样定义 class
class Dog: Animal {
}
编译器会强制你继承自AnimalBase
class Dog: AnimalBase, Animal {
}
最后为 move()
方法
class Dog: AnimalBase, Animal {
func move() {
print("")
}
}
您误解了 required
的意思。 required
不会强制您覆盖初始化程序,它需要初始化程序 存在 .
初始化器并不总是被继承的。例如,如果您创建一个新的指定构造器,那么超类构造器将不会被继承。 required
在这种情况下,初始化程序会强制您定义一个。
普通方法不会发生这种情况,因为它们总是被继承的。这就是 required
方法不存在的原因。
您正在寻找 abstract(或 C++ 中的 pure virtual)方法,这是 [=28 中不存在的概念=].