是否有可能有一个强制静态方法而不是类方法的 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

协议中声明classstatic 方法要求 声明,static声明标记方法声明 修饰符

来源:Protocol Method Declaration


当您在class 中实现protocolstatic 方法时,在您的实现中使用classstatic 没有区别。

protocol ProtocolForClasses: class 
  static func method()


class ClassOne: ProtocolForClasses 
  class func method() 

  


class ClassTwo: ProtocolForClasses 
  static func method() 

  

【讨论】:

"在你的实现中使用 classstatic 没有区别" → 实际上是有区别的,static 方法不能在子类中被覆盖,而 class 方法可以。

以上是关于是否有可能有一个强制静态方法而不是类方法的 Swift 协议,反之亦然?的主要内容,如果未能解决你的问题,请参考以下文章

重载时如何强制matlab调用常规函数而不是类方法?

是否有任何可能的方法来强制使用字符串文字进行隐式构造函数初始化

c# 有调用一个类的静态方法,是不是执行这个类的构造函数

私有的嵌套类(内部或静态)是不是可能具有具有公共访问权限的方法?

静态方法对可扩展性有好处吗?

IOC - 具有静态辅助方法的 util 类是不是应该与 IOC 连接?