重写扩展中的方法,Swift
以下代码不再生成Swift的哪个版本 <代码>导入基础 @objc类:NSObject{ @objc func str()->字符串{ 返回“你好,游乐场” } } 类子类:类{ } 扩展子类{ 重写func str()->字符串{ 返回“嗨” } } 据我所知,以前版本的Swift编译了这段代码,结果出人意料。在Swift 5.1上,它不再生成。Dynamic modifier 您可以使用重写扩展中的方法,Swift,swift,overriding,extension-methods,swift5,Swift,Overriding,Extension Methods,Swift5,以下代码不再生成Swift的哪个版本 导入基础 @objc类:NSObject{ @objc func str()->字符串{ 返回“你好,游乐场” } } 类子类:类{ } 扩展子类{ 重写func str()->字符串{ 返回“嗨” } } 据我所知,以前版本的Swift编译了这段代码,结果出人意料。在Swift 5.1上,它不再生成。Dynamic modifier 您可以使用dynamic修改器执行此操作 @objc class Animal: NSObject { @obj
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进行测试
正如您在这里看到的->您可以添加新功能,但不能覆盖扩展中的方法
注
扩展可以向类型添加新功能,但不能覆盖现有功能
因此,您无法在Swift 5.1中执行此操作。请不要标记所有Swift版本,如果您的问题与特定版本的更改直接相关,请仅使用特定版本标记。因此,只有
swift5
标记有效,不应添加2,3和4。但这与obj-c不同,尤其是使用dynamic
修饰符。@objc
类的规则最近才开始实施。问题不是如何使其编译。这个问题纯粹是历史性的:“既然下面的代码不再[编译]了,那么Swift的哪个版本?”唯一可能的答案是版本号。@马特,我认为你是对的。我应该删除我的答案吗?我的理解可能是错误的,我发布的重写代码用于编译,因为我不知道dynamic关键字