【问题标题】:Creating an empty var gives me an error创建一个空变量给我一个错误
【发布时间】:2015-09-01 02:40:07
【问题描述】:

我有一个enum,里面有 4 个对象。我正在尝试创建一个 empty 变量,该变量指向enum 中的某个对象。

enum Collection:Int{
        case First=1, Second, Third, Fourth
}
var myCollection : Collection

myCollection = Collection.Second // This will happen later on.

我在类名处收到以下错误:

“MyClassName”类没有初始化程序

我该如何解决这个问题?

【问题讨论】:

  • var myCollection : Collection! 你必须设置可选值.. ! or ?

标签: ios swift enums


【解决方案1】:

正如您关于此开关的其他问题一样,在使用开关语句时,隐式展开变量会给您(看似)奇怪的错误消息。 (可以使用switch myCollection as Collection 修复。)。

无论如何,对于手头的问题,扩展您的枚举以包含 .None 值可能是有意义的。并定义变量 var

myCollection : Collection = .None

【讨论】:

  • 谢谢! 1 - switch myCollection as Collection 是否与 "switch myCollection!" 相同? 2 - 当myCollection : Collection! 工作时。添加 .None 和 ! 有什么好处吗?
  • 如果您使用 .None 值定义它并且不隐式打开它(通过使用!)您的 myCollection var 实际上是 Collection 类型,而不是(不同的)展开类型。此外,作为一个枚举,它应该是类型安全的。
【解决方案2】:

将您的属性更改为可选

    var myCollection : Collection?

或者给它一个默认值

    var myCollection : Collection = Collection.First

如果它不是可选的或没有默认值,则必须在初始化程序中对其进行初始化。

【讨论】:

    【解决方案3】:

    您需要初始化实例属性。

    有很多方法可以修复该错误。视情况而定。

    enum Collection: Int {
        case First = 1, Second, Third, Fourth
    }
    
    var myCollection: Collection = Collection.First
    
    myCollection = Collection.Second
    

    如果要设置 nil,请使用 ?(问号)。

    enum Collection: Int {
        case First = 1, Second, Third, Fourth
    }
    
    var myCollection : Collection?
    
    myCollection = Collection.Second
    

    或者(在这种情况下,我只使用了 init()。)

    enum Collection:Int{
        case First = 1, Second, Third, Fourth
    }
    var myCollection : Collection
    
    init() {
        myCollection = Collection.Second 
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多