作业总是用swift进行复制

作业总是用swift进行复制,swift,assign,Swift,Assign,这是一个简单的代码,它只是: 将列表1分配给列表2 从列表2中删除对象 该对象已从列表2中删除,但仍存在于列表1中 似乎赋值与复制类似,但没有赋值指针 我想知道是否有任何官方文档对此进行了解释,以及如何使其在此处输入code是的,Apple Swift文档解释了Swift数组(字典也是)是一个结构,而不是一个对象,当它们在代码中传递时,结构会被复制。如果创建struct,它们总是被复制的。如果您想通过引用传递它,您应该创建类。数组是一个结构,结构是值类型,所以它们是按值复制的,而不是按引用复制的

这是一个简单的代码,它只是:

  • 将列表1分配给列表2
  • 从列表2中删除对象
  • 该对象已从列表2中删除,但仍存在于列表1中
  • 似乎赋值与复制类似,但没有赋值指针


    我想知道是否有任何官方文档对此进行了解释,以及如何使其
    在此处输入code

    是的,Apple Swift文档解释了Swift数组(字典也是)是一个结构,而不是一个对象,当它们在代码中传递时,结构会被复制。如果创建struct,它们总是被复制的。如果您想通过引用传递它,您应该创建类。

    数组是一个结构,结构是值类型,所以它们是按值复制的,而不是按引用复制的。 对于字典也会发生同样的情况,如果分配给另一个变量,则会创建一个副本

    类是引用类型,赋值将引用复制到实例

    你可以阅读更多关于这方面的文章


    旁注:传递给函数的结构是不可变的-您不能在函数中修改它,除非您使用
    inout
    属性通过引用传递它文档中有一个重要的注释,其他注释/答案没有提到:

    在下面:

    上面的描述是指字符串、数组和数组的“复制” 字典。您在代码中看到的行为将始终是 复制发生了。但是,Swift只执行实际的备份 绝对有必要这样做的场景。斯威夫特管理一切 重视复制以确保最佳性能,您不应避免 分配以尝试抢占此优化


    因此,虽然你应该始终对待作业,例如“副本”,但除非它确实需要,否则它就不是,所以除非你确定需要,否则不要尝试“围绕它进行优化”。

    这解释了文档,但没有回答如何使其工作@NeerajNama OP问我想知道是否有任何官方文件解释它以及如何制作它。
    var list1 = [1, 2, 3, 4, 5]
    var list2 = list1
    list2.removeLast()
    println(list1)
    println(list2)