我有这个案子:
class classA{
var objB : classB;
init(){
objB = classB(&self) //ERROR!
}
}
class classB{
var _objA : classA
init(inout objA : classA){
_objA = objA;
}
}
我收到了以下消息:' classA'不是' @lvalue $ T3'
的子类型答案 0 :(得分:6)
该错误具有误导性,但您的程序不应该编译:将self
作为输入输出参数传递是没有意义的。斯威夫特书清楚地说明了inout
可以传递的内容:
您只能传递一个变量作为输入输出参数的参数。
这非常有意义:想象如果您的函数为其objA
参数指定了新值,会发生什么。由于它对应于调用者中的self
,因此调用者对象需要替换为新的调用者对象,而没有明确的语义。
您可以通过为self
定义临时变量来解决此问题,如下所示:
var temp = self;
objB = classB(&temp)