簡體   English   中英

如何防止對象被迅速覆蓋? ViewController1中的對象被ViewController2中相同類型的對象覆蓋

[英]How to prevent object being overwritten - swift ? Object in ViewController1 is being over-written with same type of object in ViewController2

這只是實際發生情況的視覺場景。

我的View Controller1中有一個對象A。 同樣,在View Controller2中,我有一個與ObjectA類型相似的ObjectB。

現在,單擊一個按鈕,我從我的第一個視圖控制器分配ViewController2.ObjectB = ViewController1.ObjectA (或self.ObjectA)。

現在,數據成功傳遞到ViewController2。 但是,當我對ViewController2中的ObjectB進行一些更改時,這些更改也將反映在ViewController1的ObjectA中。

這不應該發生,因為然后丟失了ObjectA的原始數據,如果用戶在從ViewController1到ViewController2之間來回時需要,而我反過來也需要,因為我總是在單擊ViewController1中的按鈕時始終執行此ViewController2.ObjectB = ViewController1.ObjectA ViewController1.ObjectA 。

有人知道發生了什么嗎? 請幫幫我。 它讓我發瘋:-(

發生這種情況是因為您的對象是通過引用而不是通過值傳遞的。 您可以做的是克隆對象而不是傳遞對象本身。

ViewController2.ObjectB = ViewController1.ObjectA.clone()

您必須在ObjectA類中實現克隆功能,該類將根據當前對象創建一個新對象,如下所示

class MyClass {
    let number: Int

    init(number: Int) { 
        self.number = number
    }

    func clone() -> MyClass {
        return MyClass(number: self.number)
    }
}

如果您想了解更多信息, 請查閱https://developer.apple.com/swift/blog/?id=10https://www.raywenderlich.com/112027/reference-value-types-in-swift-part -1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM