如何在 Swift 扩展中调用 `Self` 上的方法?

How can I invoke a method on `Self` in a Swift extension?

当我尝试评估此扩展时

extension Int {
    static var allOnes: Int {return ~Self.allZeros}
}

我明白了

x.swift:2:38: error: use of unresolved identifier 'Self' static var allOnes: Int {return ~Self.allZeros}

不过我可以使用小写 self

但是 allZeros 是一种类型方法,所以我认为 Self 应该有效。在实例上调用类型方法看起来很愚蠢(当然我知道这是有道理的)。为什么会出现此错误?我是否必须以某种方式在我的扩展程序中操纵 Self 的值才能开始工作?

因为 allZeros 已经是 Int 的一个方法,你可以这样做:

extension Int {
    static var allOnes: Int { return ~allZeros }
}
extension Int {
    static var allOnes: Int {return ~self.allZeros}
}

在 static/class 上下文中,self 指的是类型。

在非静态上下文中,您可以使用 self.dynamicType.

另请注意,有人提议允许 Self 在非静态上下文中访问类型(请参阅 https://github.com/apple/swift-evolution/blob/master/proposals/0068-universal-self.md