Struct 快速访问结构

Struct 快速访问结构,struct,enums,swift,Struct,Enums,Swift,如果我有这样定义的结构: struct Cat { static let Siamese = "Siamese" static let Tabby = "Tabby" static let Fluffy = "Fluffy" static func cat () -> [String] { return [Siamese, Tabby, Fluffy] } } 为什么我不能这样访问它 var cat:Cat = Cat.Siame

如果我有这样定义的结构:

struct Cat {
    static let Siamese = "Siamese"
    static let Tabby = "Tabby"
    static let Fluffy = "Fluffy"

    static func cat () -> [String] {
        return [Siamese, Tabby, Fluffy]
    }
}
为什么我不能这样访问它

var cat:Cat = Cat.Siamese //"NSString" is not a subtype of Cat

您正试图将字符串分配给定义为
Cat
的变量。这就是为什么会出现错误

Cat
结构中的所有静态成员都是字符串,而不是
Cat
s

此外,您的结构没有任何实际成员。我认为您打算拥有一个名称属性:

struct Cat {
    let name: String

    static let Siamese = Cat(name: "Siamese")
    static let Tabby = Cat(name: "Tabby")
    static let Fluffy = Cat(name: "Fluffy")
}

var cat : Cat = Cat.Siamese
使用枚举可能会更好:

enum Cat : String {
    case Siamese = "Siamese"
    case Tabby = "Tabby"
    case Fluffy = "Fluffy"
}

var cat: Cat = .Tabby
println(cat.toRaw()) // "Tabby"

Cat.Cat()的语义是什么?它肯定读得不正确。编程的一个重要方面是避免代码/模型与现实世界之间的差异。建议
class猫{let name…}
class猫{let breed:CatBreed…}
。您的代码正在与自身“斗争”(在您使用
static let…
static func cat()
)时)。您应该这样调用var cat:String=cat.Siamese