如果我有
enum Dog: String {
case Snoopy = "Snoopy"
case Lassie = "Lassie"
case Scooby = "Scooby"
case Astro = "Astro"
static let fromIndex = [ 0: Snoopy, 1: Lassie, 2: Scooby, 3: Astro ]
static let all = [ Snoopy, Lassie, Scooby, Astro ]
static let count = all.count
func indexValid( index: Int ) -> Bool {
return 0 ... ( self.count - 1 ) ~= index ? true : false
}
}
Dog.count 在Playground中给出了预期的4,但是 indexValid(1)会抛出错误静态成员'count'不能在类型的实例上使用'狗'
我尝试过getter和setter以及其他类型的引用而没有运气。有没有办法在Swift的枚举函数中使用像 count 这样的变量?
答案 0 :(得分:2)
在常规方法中,如indexValid
,如果您引用self
,则会引用该实例。
但是,在static
方法中,self
指的是类型(在本例中为Dog
)而不是实例,因此您应该使用Dog.count
,因为名为count
的实例上没有属性,所以它类型为Dog
,如:
func indexValid( index: Int ) -> Bool {
return 0 ... Dog.count ~= index ? true : false
}
你应该这样称呼:
let dogInstance = Dog.Snoopy
dogInstance.indexValid(5)
如果您将indexValid
改为static
,则可以使用原始版本:
static func indexValid( index: Int ) -> Bool {
return 0 ... self.count ~= index ? true : false
}
之后调用它将是:
Dog.indexValid(5)