[英]It seems like each View Controller is creating a unique instance of my struct - which I don't want?
我正在使用Tabbed-Application模板在Swift 2.0 xCode7中創建一個應用程序,每個屏幕都有一個單獨的ViewController。 我有一個結構來管理我想被所有視圖控制器訪問的變量。 我在第一個視圖控制器中創建了該結構的實例。 我可以在其他視圖中訪問結構數據和方法,但是如果在一個視圖中更新數據,則它並不會全部更改...就像每個View Controller自己在創建自己的實例一樣。 我不要 我希望每個ViewController在結構中共享相同的更新數據。 這是否意味着我應該創建一個Singleton模式? 或者是其他東西? 我對此很陌生,非常感謝您的耐心配合。
我不確定您如何精確地訪問結構,但可能只是您需要將struct
更改為class
因為結構是值類型,因此如果您將其賦值或傳遞給方法,它將被復制,而類的實例將避免仿形
因為您沒有給我任何代碼,所以這只是我的猜測。
結構與類不同。 前者存儲值 ,后者存儲引用 。 讓我們看一下這段代碼:
var obj = SomethingCool()
obj.somethingCooler = 20
var obj2 = obj
obj2.somethingCooler = 10
如果SomethingCool
是一個結構,則obj.somethingCooler
仍為20,而obj2.somethingCooler
10。另一方面,如果SomethingCool
是一個類,則obj.somethingCooler
和obj2.somethingCooler
20。
這是因為第三行。 第三行非常重要。 如果SomethingCool
是一個結構,則存儲在obj
的值將被復制到obj2
。 即將創建兩組獨立值。 如果它是一個類,則obj2
也將引用obj
的對象。 即仍然只有一個對象 。
現在您知道了區別,我可以告訴您,您必須在視圖控制器中完成了第三行之類的工作,不是嗎?
要解決此問題,可以從結構更改為類。 或者,您可以創建以下內容:
public class SomeName {
static var myData: SomeTypeOfStruct {
return something
}
}
如果您如此堅持將其作為結構,那么您可以做一些迅速有效的事情來幫助您…….AppDelegate!
appdelegate.swift是任何應用程序的單個實例對象。 因此,如果要保存需要在整個應用程序中訪問或在整個應用程序中更新的值,則可能要使用AppDelegate。
例如,在FirstViewController.swift中,設置要在其余屏幕上反映的AppDelegate變量:
(UIApplication.sharedApplication().delegate as! AppDelegate).commonVariableName = NewValueYouWant;
在SecondViewController.swift中,從AppDelegate占用該值
var updatedValue = (UIApplication.sharedApplication().delegate as! AppDelegate).commonVariableName;
再次...如@Sweeper所說,您始終可以切換到更可靠的類,並用於實現類似目的。
就像每個View Controller自己創建自己的實例一樣。
這些都在Apple的Swift指南中進行了說明 :
結構:
struct Dog {
var name: String
}
var d1 = Dog(name: "Rover")
var d2 = d1
d2.name = "Sally"
print(d1.name)
print(d2.name)
--output:--
Rover
Sally
類別:
class Cat {
var name: String = ""
}
var c1 = Cat()
c1.name = "Kitty"
var c2 = c1
c2.name = "Gerald"
print(c1.name)
print(c2.name)
--output:--
Gerald
Gerald
看到不同?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.