2015-04-02 57 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