Swift枚举中的静态属性错误

时间:2016-01-26 10:36:12

标签: swift

我觉得我正在围着这个问题的答案跳舞,但是并没有得到它 - 在课堂上有很多非常有用的问题和答案关于静态属性,但是enums看起来有点不同这里。

如果我有

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 这样的变量?

1 个答案:

答案 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)