【问题标题】:Swift - accessing structsSwift - 访问结构
【发布时间】:2014-09-11 11:35:12
【问题描述】:

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

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() 的语义是什么?它肯定不能正确读取。重要的编程方面之一是避免代码/模型与现实世界之间的差异。建议class CatBreed { let name ... }class Cat { let breed : CatBreed ... }。您的代码正在与自己“战斗”(在您使用 static let ...static func cat() 时)。
  • 你应该这样调用 var cat:String = Cat.Siamese

标签: struct enums swift


【解决方案1】:

您正在尝试将字符串分配给定义为Cat 的变量。这就是您收到错误的原因。

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

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

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"

【讨论】:

    猜你喜欢
    • 2020-03-15
    • 1970-01-01
    • 2021-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    • 2022-01-23
    • 1970-01-01
    相关资源
    最近更新 更多