2015-04-02 39 views
0

just started a question几分钟前,我了解到,swift中的类实例是引用类型。然而,当我问及如何将一个实例作为副本传递,或者只是在函数内部创建一个副本,似乎没有人知道。所以我的问题是:如何通过值传递引用类型?

是否有可能通过值传递一个类对象的函数? 如果是的话,怎么做,如果不是的话,我怎样才能使用副本呢?

+1

也许你可以使用Struct来对象传递值 – 2015-04-02 09:00:20

回答

2

不可能通过值传递Swift中的类对象。此外,没有制作对象副本的一般方法,因此您需要提供例如适当的初始化者。

+0

我想你是在谈论NSCopying和copyWithZone? – Samir 2015-04-02 08:55:51

+1

@Samir我正在谈论具有与参数相同的类对象的初始化程序。 – 2015-04-02 09:10:46

0

值对象和引用对象服务于不同的目的。询问如何通过值传递引用对象是毫无意义的。但是,很多时候您会传递不可变的对象,并且这意味着对象的引用是的值。

顺便说一句:你不是指“类对象”。你的意思是“一个班的实例”。在Objective-C中,类本身就是对象。例如,您将alloc消息发送给一个类对象。

+0

我来自C++,因为'MyClass foo = MyClass()'被称为类对象,所以它是一个实例。然而,如果我将foo传递给一个函数,那么如果我不使用引用(&),它将是该函数内的副本(如果有复制构造函数可用)。也许这更清楚我想问什么。无论如何谢谢你明确这一点 – 2015-04-02 12:23:12

0

如何通过值传递引用类型?

这个问题的答案正如你所说的那样,你只是通过价值来传递它。它对于引用类型和值类型的工作方式完全相同。 Swift中未标记为inout的任何参数都是按值传递的。

参考类型变量的值是参考,它指向一个对象。当您通过值传递引用时,接收函数会收到此引用的副本,该副本指向同一个对象。

在进一步阅读您的问题后,您似乎并未询问有关引用类型的传递。相反,你在问复制对象。当你编写“引用类型”时,你的意思就像是“对象类型”,它的值是一个对象,当它被值传递时会产生对象的副本。

Swift没有“对象类型”;就像Objective-C和Java没有“对象类型”一样。变量的值是“一个对象”是不可能的;你只能有一个变量,其值是一个“指向一个对象”的引用。通过这些引用来操作对象。语言中没有语法来“引用”它指向的对象的引用。

+0

好吧这是我正在寻找的答案。你的最后一句话说得很清楚。但是我根本没有使用“引用类型”,它只是被编辑。 Hower现在很好,Swift没有“对象类型”,我来自C++世界,也许这就是为什么我只是错误地理解了对象的东西 – 2015-04-07 08:17:36