Lazy var give' Instance成员不能用于类型'错误

时间:2015-12-11 14:33:06

标签: ios swift lazy-evaluation

我现在多次出现此错误,并采用了不同的解决方法,但我真的好奇为什么会这样。基本情况如下:

class SomeClass {
  var coreDataStuff = CoreDataStuff!
  lazy var somethingElse = SomethingElse(coreDataStuff: coreDataStuff)
}

所以我理解在类完全初始化之前我不能使用self,但是在这种情况下我使用self属性coreDataStuff来初始化一个lazy var,直到我的实例准备好才会发生。< / p>

任何人都可以解释我为什么会这样做 Instance member can not be used on type错误?

2 个答案:

答案 0 :(得分:31)

试试:

class SomeClass {
  var coreDataStuff = CoreDataStuff!
  lazy var somethingElse: SomethingElse = SomethingElse(coreDataStuff: self.coreDataStuff)
}

确定lazy var的类型并将self.添加到您传递的参数

非常重要

答案 1 :(得分:9)

有两个要求在Swift中很容易被懒惰变量忽略,不幸的是,这些警告很神秘,并没有解释如何修复它。

懒惰变量要求

  1. 使用self. :在引用实例成员时,您必须使用self.。 (例如self.radius。)

    如果您忘记使用self.,则会收到此错误:

      

    实例成员&#39; myVariable&#39;不能在类型&#39; MyType&#39;

    上使用
  2. 指定类型:无法推断类型,必须明确写入。 (例如: Float。)

    如果您忘记指定类型,则会收到此错误:

      

    使用未解析的标识符&#39; self&#39;

  3. 实施例

    struct Circle {
      let radius: Float
      lazy var diameter: Float = self.radius * 2 // Good
    //lazy var diameter        =      radius * 2 // Bad (Compile error)
    }