Ios 懒惰的给予';实例成员不能用于类型';错误
我已经犯了好几次这样的错误,我采取了不同的解决办法,但我真的很好奇为什么会发生这种情况。基本情况如下:Ios 懒惰的给予';实例成员不能用于类型';错误,ios,swift,lazy-evaluation,Ios,Swift,Lazy Evaluation,我已经犯了好几次这样的错误,我采取了不同的解决办法,但我真的很好奇为什么会发生这种情况。基本情况如下: class SomeClass { var coreDataStuff = CoreDataStuff! lazy var somethingElse = SomethingElse(coreDataStuff: coreDataStuff) } 所以我知道我不能在类完全初始化之前使用self,但在这种情况下,我使用self属性coreDataStuff初始化一个延迟变量,直到我的实
class SomeClass {
var coreDataStuff = CoreDataStuff!
lazy var somethingElse = SomethingElse(coreDataStuff: coreDataStuff)
}
所以我知道我不能在类完全初始化之前使用self,但在这种情况下,我使用self属性coreDataStuff
初始化一个延迟变量,直到我的实例准备好之后才会发生
任何人都可以解释我为什么会
实例成员不能用于类型
错误?请尝试:
class SomeClass {
var coreDataStuff = CoreDataStuff!
lazy var somethingElse: SomethingElse = SomethingElse(coreDataStuff: self.coreDataStuff)
}
很重要的一点是,要精确定义惰性变量的类型,并在传递的参数中添加
self。
在Swift中,惰性变量容易忽略两个要求,不幸的是,警告很模糊,没有解释如何修复它
惰性变量需求
self.
:引用实例成员时,必须使用self.
。(例如,自身半径
)
如果忘记使用self.
,将出现以下错误:
实例成员“myVariable”不能用于类型“MyType”
:Float
)
如果忘记指定类型,将出现以下错误:
使用未解析标识符“self”
返回的是什么?
CoreDataStuff()
?抱歉,键入代码示例太快,它没有返回任何内容,只是未包装的可选内容,稍后将使用管理我的核心数据对象的实例对其进行初始化。只是想澄清一下,当前版本的代码给了我一个错误,可能是因为您没有使用“self.coreDataStuff”?可能的重复与。这个问题涉及惰性变量,而另一个问题涉及get only变量。在Swift中有两个非常不同的东西。你能解释一下这个语法吗?因为这是我第一次看到这样的东西。将self作为参数传递给SomethingElse init是怎么回事?我试过了,但它给了我一个错误,它无法将self转换为CoreDataStuff,这是正常的,因为SomeClass与CoreDataStuff无关。你是否在我写的时候添加了SomeThingelType
?哦,等等,我以为SomethingElse
是一种方法。。。我的宝贝,我同时也明白了,谢谢你,这很有帮助。知道为什么斯威夫特在我添加self时不抱怨吗。对于coreDataStuff?我想,由于上下文不同(不是在方法中),所以不明显您想要的是coreDataStuff
的内容,而不是“指针”coreDataStuff
。你需要精确类型,因为你引入了一个“变量”,我猜编译器不确定它是什么类型,因为它是惰性的。
struct Circle {
let radius: Float
lazy var diameter: Float = self.radius * 2 // Good
//lazy var diameter = radius * 2 // Bad (Compile error)
}