2014-10-04 153 views
83

我有一個全局變量,需要在我的ViewControllers之間共享。如何創建一個全局變量?

在Objective-C中,我可以定義一個靜態變量,但是我找不到在Swift中定義全局變量的方法。

你知道一個辦法嗎?

+0

一個答案在這裏http://stackoverflow.com/questions/24868120/how-to-create-global-variable-in-swift – 2014-10-04 17:36:18

+0

的可能的複製[如何創建斯威夫特全局變量?( https://stackoverflow.com/questions/24868120/how-to-create-global-variable-in-swift) – 2018-01-24 03:59:47

回答

139

從迅速編程guide

全局變量是任何 函數,方法,封閉件,或類型上下文之外定義的變量。全局常量和變量 總是懶洋洋地

計算您可以在任何文件中定義它,並可以在任何地方訪問它在當前module。 所以你可以在任何範圍之外的文件中的某個地方定義它。沒有必要使用static,並且所有全局變量都是延遲計算的。

var yourVariable = "someString" 

並且您可以從當前模塊的任何位置進行訪問。

但是,您應該避免這種情況,因爲全局變量對於應用程序狀態並不好,主要原因是錯誤。

如圖所示answer 在swift中,您可以將它們封裝在struct中,並且可以在任何地方訪問。 您也可以在swift中定義靜態變量或常量。封裝在struct

struct MyVariables { 
    static var yourVariable = "someString" 
} 

您可以在任何類中使用這個變量或任何地方,任何方法或關閉外,可以按照範圍由使用private關鍵字限制

let string = MyVariables.yourVariable 
println("Global variable:\(string)") 

//Changing value of it 
MyVariables.yourVariable = "anotherString" 
+3

*您的*結構被稱爲'MyVariables',所以'MyViewState'看起來像來自http的複製/粘貼錯誤://stackoverflow.com/a/24868789/1187415 :) – 2014-10-04 18:48:07

+0

感謝Martin R.是的,我已經複製了它的代碼 – codester 2014-10-04 18:49:52

+6

如果你從另一個答案複製代碼,那麼你應該明確指出(與原始答案的鏈接) 。比較http://stackoverflow.com/help/referencing。 – 2014-10-04 18:52:46

13

全局變量。

import UIKit 

// MARK: Local Constants 

private let changeSegueId = "MasterToChange" 
private let bookSegueId = "MasterToBook" 
+14

常數(「讓」)不是一個變量。 – 2016-09-01 05:24:33