是否有可能有一个强制静态方法而不是类方法的 Swift 协议,反之亦然?
Posted
技术标签:
【中文标题】是否有可能有一个强制静态方法而不是类方法的 Swift 协议,反之亦然?【英文标题】:Is it possible to have a Swift protocol that enforces static method and not class method or vice versa? 【发布时间】:2017-02-10 20:39:22 【问题描述】:是否有可能有一个 Swift 协议强制执行静态方法而不是类方法,反之亦然?
例如,即使协议设置为类协议,也不允许使用 class func 或 final class func:
protocol MyProtocol: class
final class func dummyClassMethod()
或者在这种情况下,允许一个类创建一个静态方法或符合这个的类方法:
protocol MyProtocol: class
static func dummyClassMethod()
【问题讨论】:
【参考方案1】:您不能,因为苹果的文档明确表示为此目的仅使用 static
:
在协议中声明
class
或static
方法要求 声明,用static
声明标记方法声明 修饰符。
来源:Protocol Method Declaration
当您在class
中实现protocol
的static
方法时,在您的实现中使用class
或static
没有区别。
protocol ProtocolForClasses: class
static func method()
class ClassOne: ProtocolForClasses
class func method()
class ClassTwo: ProtocolForClasses
static func method()
【讨论】:
"在你的实现中使用class
或 static
没有区别" → 实际上是有区别的,static
方法不能在子类中被覆盖,而 class
方法可以。
以上是关于是否有可能有一个强制静态方法而不是类方法的 Swift 协议,反之亦然?的主要内容,如果未能解决你的问题,请参考以下文章
是否有任何可能的方法来强制使用字符串文字进行隐式构造函数初始化