Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重写扩展中的方法,Swift_Swift_Overriding_Extension Methods_Swift5 - Fatal编程技术网

重写扩展中的方法,Swift

重写扩展中的方法,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

以下代码不再生成Swift的哪个版本

<代码>导入基础 @objc类:NSObject{ @objc func str()->字符串{ 返回“你好,游乐场” } } 类子类:类{ } 扩展子类{ 重写func str()->字符串{ 返回“嗨” } } 据我所知,以前版本的Swift编译了这段代码,结果出人意料。在Swift 5.1上,它不再生成。

Dynamic modifier 您可以使用
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关键字