惰性变量给出 'Instance member can not be used on type' 错误

Lazy var giving 'Instance member can not be used on type' error

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

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

所以我知道在 class 完全初始化之前我不能使用 self,但在这种情况下我使用 self 属性 coreDataStuff 来初始化一个惰性变量,它不会直到我的实例准备就绪。

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

试试看:

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

确定惰性变量的类型并将 self. 添加到您传递的参数中很重要

Swift 中的惰性变量很容易忽略两个要求,不幸的是,警告是含糊不清的,没有解释如何修复它。

惰性变量要求

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

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

    Instance member 'myVariable' cannot be used on type 'MyType'

  2. 指定类型:类型无法推断,必须显式写入。 (例如 : Float。)

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

    Use of unresolved identifier 'self'

例子

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