调用静态方法而不重复类名

时间:2018-09-19 15:32:07

标签: swift

在Swift中,是否可以调用static(或class)方法/属性而无需编写类名(通过实例方法)?

class Foo {
  class func someValue() -> Int {
    return 1337
  }

  func printValue() {
    print(Foo.someValue())
    print(type(of: self).someValue())

    print(Self.someValue()) // error: use of unresolved identifier 'Self'
  }
}

到目前为止,我已经找到一种协议/类型别名的解决方法:

protocol _Static {
  typealias Static = Self
}


class Foo: _Static {
  class func someValue() -> Int {
    return 1337
  }

  func printValue() {
    print(Static.someValue()) // 1337
  }
}

但是我想知道是否有更好的方法来做到这一点?

1 个答案:

答案 0 :(得分:0)

在Swift 5.1中,此代码不再产生错误。

class Foo {
  class func someValue() -> Int {
    return 1337
  }

  func printValue() {
    print(Foo.someValue())
    print(type(of: self).someValue())

    print(Self.someValue()) // ok
  }
}