当我尝试评估此扩展程序时
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
的值才能开始工作?
答案 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 }
}