由于以下代码不再构建哪个版本的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
使用Swift 5.1.3进行测试
您可以在这里看到-> Extensions documentation您可以添加新功能,但不能覆盖扩展中的方法。
注意
扩展可以向类型添加新功能,但是它们不能覆盖现有功能。
所以您不能在Swift 5.1中做到