覆盖扩展中的方法,Swift

问题描述 投票:-1回答:2

由于以下代码不再构建哪个版本的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上,它将不再生成。

swift overriding extension-methods swift5
2个回答
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进行测试


0
投票

您可以在这里看到-> Extensions documentation您可以添加新功能,但不能覆盖扩展中的方法。

注意

扩展可以向类型添加新功能,但是它们不能覆盖现有功能。

所以您不能在Swift 5.1中做到

© www.soinside.com 2019 - 2024. All rights reserved.