是" inout"影响数组写入行为的副本?

时间:2017-09-21 20:57:37

标签: arrays swift

我认为inout会让你传入一个引用(这是准确吗?),然后如果引用多次更改,就像你对数组所做的那样,那么数组就不需要多次复制了,因为它现在是参考类型?

2 个答案:

答案 0 :(得分:1)

swift中输入输出参数的语义与通过引用传递值不同。以下是您传递输入输出参数时发生的情况:

  

输入输出参数传递如下:

     
      
  1. 调用该函数时,将复制参数的值。
  2.   
  3. 在功能正文中,副本被修改。
  4.   
  5. 当函数返回时,副本的值将分配给原始参数。
  6.         

    此行为称为copy-in copy-out或按值调用结果。例如,当计算属性或具有观察者的属性作为输入输出参数传递时,其getter作为函数调用的一部分被调用,其setter作为函数返回的一部分被调用。

请参阅https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Declarations.html#//apple_ref/doc/uid/TP40014097-CH34-ID545

数组是swift中的 value 类型,因此在这种情况下完全复制了它。当然,swift编译器可以对其进行优化,但无论如何,您都可以保证看到完全相同的行为。

答案 1 :(得分:0)

如果要通过引用传递数组并允许被调用函数快速修改元素 ,则可以选择显式创建NSMutableArray,或创建实例具有数组的类他们的单身成员。