覆盖扩展中的方法,Swift
Overriding a method in an extension, Swift
从哪个版本的 Swift 开始,以下代码不再构建?
import Foundation
@objc class Class: NSObject {
@objc func str() -> String {
return "Hello, playground"
}
}
class Subclass: Class {
}
extension Subclass {
override func str() -> String {
return "Hi"
}
}
据我了解,Swift 的早期版本编译此代码时产生了意外结果。在 Swift 5.1 上,它不再构建。
动态修饰符
您可以使用 dynamic
修饰符
@objc class Animal: NSObject {
@objc dynamic func saySomething() {
print("I am an Animal")
}
}
@objc class Dog: Animal { }
extension Dog {
override func saySomething() {
print("I am a Dog")
}
}
Dog().saySomething() // I am a Dog
Tested with Swift 5.1.3
如您在此处所见 -> Extensions documentation 您可以添加新功能,但不能覆盖扩展中的方法。
NOTE
Extensions can add new functionality to a type, but they cannot override existing functionality.
所以你不能在 Swift 5.1
从哪个版本的 Swift 开始,以下代码不再构建?
import Foundation
@objc class Class: NSObject {
@objc func str() -> String {
return "Hello, playground"
}
}
class Subclass: Class {
}
extension Subclass {
override func str() -> String {
return "Hi"
}
}
据我了解,Swift 的早期版本编译此代码时产生了意外结果。在 Swift 5.1 上,它不再构建。
动态修饰符
您可以使用 dynamic
修饰符
@objc class Animal: NSObject {
@objc dynamic func saySomething() {
print("I am an Animal")
}
}
@objc class Dog: Animal { }
extension Dog {
override func saySomething() {
print("I am a Dog")
}
}
Dog().saySomething() // I am a Dog
Tested with Swift 5.1.3
如您在此处所见 -> Extensions documentation 您可以添加新功能,但不能覆盖扩展中的方法。
NOTE
Extensions can add new functionality to a type, but they cannot override existing functionality.
所以你不能在 Swift 5.1