グローバル変数を作成する方法は?


123

ViewController間で共有する必要があるグローバル変数があります。

Objective-Cでは、静的変数を定義できますが、Swiftでグローバル変数を定義する方法が見つかりません。

それを行う方法を知っていますか?




クラスの外部で変数または構造体を定義すると、アプリケーション全体でその変数にアクセスできます。
チャンドニー2018年

回答:


209

公式のSwiftプログラミングガイドから

グローバル変数は、関数、メソッド、クロージャー、またはタイプコンテキストの外部で定義される変数です。グローバル定数と変数は常に遅延計算されます。

任意のファイルで定義でき、現在moduleどこからでもアクセスできます。そのため、スコープ外のファイルのどこかに定義できます。必要はなくstatic、すべてのグローバル変数は遅延計算されます。

 var yourVariable = "someString"

これには、現在のモジュールのどこからでもアクセスできます。

ただし、グローバル変数はアプリケーションの状態および主にバグの理由に適さないため、これは避けてください。

この回答に示されているように、Swiftではそれらをカプセル化してstructどこにでもアクセスできます。Swiftでも静的変数や定数を定義できます。カプセル化struct

struct MyVariables {
    static var yourVariable = "someString"
}

この変数はどのクラスでもどこでも使用できます

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

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

3
あなたの構造体はと呼ばれるMyVariablesのでMyViewStatestackoverflow.com / a / 24868789/1187415からのコピー/貼り付けエラーのように見えます:)
Martin R

Martin Rに感謝します。はい、コードをコピーしました
codester

9
別の回答からコードをコピーする場合は、その旨を明示する必要があります(元の回答へのリンクを含む)。stackoverflow.com/help/referencingを比較してください。
マーティンR

1
了解、ありがとう!しかし、グローバル変数と構造体にカプセル化の間に違いはありますか?
czzhengkw 2014年

3
「MyVariables」はグローバルと見なされませんか?グローバル構造体または変数として宣言すると、どのように違いがありますか?
Satyam 2015年

15

メソッドまたはクロージャーの外部で定義されているグローバル変数は、privateキーワードを使用してスコープを制限できます。

import UIKit

// MARK: Local Constants

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

32
定数(「let」)は変数ではありません。
Mike Taverne

2
@MikeTaverneあなたは正しいですが、それを「var」として紹介できれば、この答えはOKです。swifttipsnet.wordpress.com/2016/09/11/...
ミラドFaridnia

4

すべてのクラスで使用したい場合は、以下を使用できます。

public var yourVariable = "something"

あなたが1つのクラスだけで使用したい場合は、使用できます:

var yourVariable = "something"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.