2017-07-06 13 views
3

スウィフトのグローバル変数と共有インスタンスの違いは何ですか?それぞれの使用分野は何ですか?誰でもSwiftに基づいて彼らのコンセプトを明確にすることができますか?グローバル変数と共有インスタンススウィフト

+0

https://stackoverflow.com/questions/32660471/any-reason-not-use-use-a-singleton-variable-in-swift –

答えて

-2

シングルトン(インスタンスを共有する)

シングルトンオブジェクトのインスタンスが1つだけそれも、アプリ間で共有することができ、オブジェクトの共有インスタンスを通じてグローバルにアクセスを提供します&作成されていることを確認してください。 ブロックを1回実行するdispatch_once関数とonly once for the lifetime of an appです。

グローバル変数

アップルのドキュメントでは、グローバル変数がoutside of any function, method, closure, or type contextを定義している変数ですと言います。

+1

これらはグローバル変数ではありません。グローバル変数は型コンテキストの外で定義され、型内で "グローバル変数"が宣言されているというドキュメントを引用しました。 –

2

グローバル変数は、ファイルのトップレベルで宣言された変数です。私たちは、あなたがこのようなグローバル変数でBarのインスタンスへの参照を格納することができBarというクラスを、持っていたのであれば:

var bar = Bar() 

あなたは、このように、どこからでもインスタンスにアクセスできるようになります

bar 
bar.foo() 

Aは、インスタンスを共有、またはシングルトン、次のようになります。

class Bar { 
    static var shared = Bar() 
    private init() {} 
    func foo() {} 
} 

次に、あなたはまだどこかでから、共有インスタンスにアクセスすることができますこのようなモジュールは、:

Bar.shared 
Bar.shared.foo() 

しかし、(グローバル変数は、単に一般的に推奨されているという事実から離れて)2間の最も重要な違いの一つは、シングルトンパターンはBarの他のインスタンスを作成するからあなたを制限していることです。 ...しかし、シングルトン(共有インスタンス)を使用して、初期化子はので、これをやろうと、プライベートで

var baaar = Bar() 

var bar2 = Bar() 
var bar3 = Bar() 

:最初の例では、あなただけのより多くのグローバル変数を作成することができます...この結果は次のようになります。 "'バー'の初期化子は 'プライベート'の保護レベルのためにアクセスできません。

シングルトンのポイントは、単一の共有インスタンスがあるためです。 Barのインスタンスにアクセスできる唯一の方法は、Bar.sharedです。ただし、クラスにprivate init()を追加することを忘れないようにしてください。他の初期設定は追加しないでください。

この詳細については、KrakenDev hereの素晴らしい記事があります。

関連する問題