簡體   English   中英

何時在Swift中使用全局變量

[英]When to use global variables in Swift

我正在學習Swift和iOS應用程序開發,我想知道在哪些情況下(如果有的話)我應該在iOS應用程序中使用全局變量和常量。

全局變量是在任何函數,方法,閉包或類型上下文之外定義的變量。 局部變量是在函數,方法或閉包上下文中定義的變量。

使用全局變量通常看起來不夠優雅且不可取(實際上大多數指南和教程並不推薦)並且在視圖控制器之間傳遞數據我使用prepareForSegue(_: sender:)方法。

在某些情況下,在我看來,使用全局變量會使代碼更簡單,更快。

例如,Apple建議為每種格式模式存儲NSDateFormatterNSNumberFormatter ,而不是每次需要時重新創建或更改一個格式模式。 在我正在開發學習語言的應用程序中,大多數視圖控制器使用NSDateFormatterNSNumberFormatter並為每個視圖控制器創建一個新的可能不是一個好主意。 我可以通過prepareForSegue傳遞它,但我認為在這種情況下,最好使用一個全局var來保存每個視圖控制器都可以使用的格式化程序實例。

那么在任何情況下我都應該使用全局變量嗎?

每當您發現自己使用全局時,您需要退后一步,仔細思考數據是什么以及它與應用程序其余部分的關系。 很容易說你需要避免使用全局變量,困難的部分是知道場景的最佳選擇,即使是資深的Cocoa開發人員也不同意。

單例模式中 ,您創建一個類並將其全局存儲在其中。 這通常作為解決方案提供,因為它是最容易開處方和遵循的,但很多時候我想知道它是否是一個解決方案。 在全球范圍內包裝課程並不會給你任何額外的保護。 畢竟,班級本身現在是一個全球性的實體。 我喜歡將Singleton模式看作是一種組織,分類和包含全局變量的方式,而不是避免使用全局變量。

應該為您的應用程序的帳篷保留單身人員,例如數據庫或遠程后端連接處理程序。 每個Cocoa / CocoaTouch應用程序都帶有一個內置的Singleton,AppDelegate,在很多情況下,各種各樣的東西可以去那里。

在許多情況下,“正確”的解決方案是傳遞數據 ,例如在prepareForSegue:類中的視圖控制器之間傳遞數據。 這在Andy Matuschak輝煌的WWDC 2014會議, 高級iOS應用程序架構和模式中得到了很好的描述。 我同意你的看法,這不適用於你的例子。 在您的示例中,您不是在兩個視圖之間處理相關數據,而是嘗試共享一個公共工具來保存資源。

對於您的具體示例,我將使用Singleton或類似模式。 對我來說有意義的一種方法是使用擴展將它們存儲在相應的類中。 例如:

extension NSDateFormatter {
  static let newDateFormatter = NSDateFormatter()
}

// use it in your app like this:
NSDateFormatter.newDateFormatter

像評論者說的那樣,這是一個意見問題。 還要記住,斯威夫特仍然很年輕,雖然它必然會從可可中大量借用,但成語仍在不斷發展。

暫無
暫無

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

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