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

时间:2016-05-18 18:43:07

标签: swift extension-methods

当我尝试评估此扩展程序时

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

我得到了

  

x.swift:2:38:错误:使用未解析的标识符' Self'      static var allOnes:Int {return~Self.allZeros}

但我可以使用小写self

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

2 个答案:

答案 0 :(得分:3)

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

在静态/类上下文中,self指的是类型。

在非静态环境中,您可以使用self.dynamicType.

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

答案 1 :(得分:2)

由于allZeros已经是Int的一种方法,你可以这样做:

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