我有这种情况:
class classA{
var objB : classB;
init(){
objB = classB(&self) //ERROR!
}
}
class classB{
var _objA : classA
init(inout objA : classA){
_objA = objA;
}
}
我收到消息:'classA'不是'@lvalue $ T3'的子类型
该错误会误导您,但您的程序不应编译:self
作为in-out参数传递没有意义。斯威夫特书清楚了什么可以通过以下方式传递inout
:
您只能将变量作为输入输出参数的参数传递。
这完全有道理:想象一下,如果您的函数为其objA
参数分配了新值,将会发生什么。由于它与self
调用者中的对象相对应,因此需要用一个没有明确语义的新对象替换该调用者对象。
您可以通过为定义一个临时变量来解决此问题self
,如下所示:
var temp = self;
objB = classB(&temp)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句