我现在多次出现此错误,并采用了不同的解决方法,但我真的好奇为什么会这样。基本情况如下:
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
错误?
答案 0 :(得分:31)
试试:
class SomeClass {
var coreDataStuff = CoreDataStuff!
lazy var somethingElse: SomethingElse = SomethingElse(coreDataStuff: self.coreDataStuff)
}
确定lazy var的类型并将self.
添加到您传递的参数
答案 1 :(得分:9)
有两个要求在Swift中很容易被懒惰变量忽略,不幸的是,这些警告很神秘,并没有解释如何修复它。
使用self.
:在引用实例成员时,您必须使用self.
。 (例如self.radius
。)
如果您忘记使用self.
,则会收到此错误:
实例成员&#39; myVariable&#39;不能在类型&#39; MyType&#39;
上使用
指定类型:无法推断类型,必须明确写入。 (例如: Float
。)
如果您忘记指定类型,则会收到此错误:
使用未解析的标识符&#39; self&#39;
struct Circle {
let radius: Float
lazy var diameter: Float = self.radius * 2 // Good
//lazy var diameter = radius * 2 // Bad (Compile error)
}