在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
  }
}


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

最佳答案

使用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
  }
}

关于swift - 调用静态方法而不重复类名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52409456/

10-12 23:35