懒惰variables给'实例成员不能用于types'错误

我现在有几次这个错误,我采取了不同的解决方法,但我真的好奇它为什么会发生。 基本情况如下:

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

所以我明白,我不能在课程完全初始化之前使用自我,但在这种情况下,我使用自己的属性coreDataStuff来初始化一个懒惰的变种,这将不会发生,直到我的实例准备就绪。

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

尝试一下:

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

确定你的懒惰variables的types并添加self.是很重要的self. 到你通过的论点

在Swift中有两个很容易被惰性variables忽略的要求,不幸的是,这些警告是神秘的,并没有解释如何解决这个问题。

懒惰variables要求

  1. 使用self. 当提到实例成员时,您必须使用self. 。 (eg self.radius 。)

    如果你忘记使用self. ,你会得到这个错误:

    实例成员'myVariable'不能用于'MyType'types

  2. 指定types:不能推断types,必须明确写入。 (例如: Float

    如果你忘记指定types,你会得到这个错误:

    使用未parsing的标识符'self'

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