Swift:错误传递self作为inout参数参数

时间:2014-08-03 10:38:38

标签: swift

我有这个案子:

class classA{
  var objB : classB;

   init(){
      objB = classB(&self) //ERROR!
  }
}

class classB{
 var _objA : classA

  init(inout objA : classA){
      _objA = objA;
  }
}

我收到了以下消息:' classA'不是' @lvalue $ T3'

的子类型

1 个答案:

答案 0 :(得分:6)

该错误具有误导性,但您的程序不应该编译:将self作为输入输出参数传递是没有意义的。斯威夫特书清楚地说明了inout可以传递的内容:

  

您只能传递一个变量作为输入输出参数的参数。

这非常有意义:想象如果您的函数为其objA参数指定了新值,会发生什么。由于它对应于调用者中的self,因此调用者对象需要替换为新的调用者对象,而没有明确的语义。

您可以通过为self定义临时变量来解决此问题,如下所示:

var temp = self;
objB = classB(&temp)