2017-11-22 5 views
-7

私はviewDidLoad()の変数を持っているので、viewDidLoad()の変数で新しい変数を外部に作ることはできません。私を助けてもらえますか?SWIFTの変数

override func viewDidLoad() { 
    super.viewDidLoad() 

    ref = Database.database().reference() 

    ref?.child("user_clicks").child(userID).observeSingleEvent(of: .value, with: { (snapshot) in 

     if let snapDict = snapshot.value as? Dictionary <String, AnyObject>{ 

     let user_counts = snapDict["Counts"] as! Int 

     print(user_counts) 

     self.label_usercounts.text = String(user_counts) 

     } 

    }) { (error) in 
     print(error.localizedDescription) 
    } 

} 

var counts = user_counts 
+0

私はもう少し研究をする必要があると思う:) – Xcoder

答えて

0

viewDidLoadメソッド内で宣言したものはすべてメソッドの外で使用することはできません。

メソッドの中括弧の中で変数を宣言すると、この変数は閉じる中括弧の後に破棄されます(静的変数変数を除く)。

Swiftの変数スコープについては、documentationをご覧ください。

UPDATE:あなたはあなたのコメントに応じて達成するために必要なもの静的変数を使用して達成することができ、メソッドが呼び出された回数カウントすることです。

残念ながら、スウィフトはstatic変数をサポートしていませんが、あなたはまだ、このようにそれを行うことができます、あなたは、データベースからクリック数の値を読んでいる場合

func functionWithCounter() { 
    struct Counter { static var numberOfCalls = 0 } 

    Counter.numberOfCalls += 1 // numberOfCalls is the number of times the method functionWithCounter() has been called. 
} 

、そしてちょうどそこからそれを読みますそれは常に最新のクリック数を持つ必要があります。メソッド内で数えてはいけません。

+0

しかし、私はそれからそれを得ることができますか?不可能? –

+0

必要なシナリオは何ですか? –

+0

私はそのボタンをクリックすると、いくつかのクリック数を表示します。私はデータベース(FireBase)からuser_countsを取る。そして今私はDBからのクリック数を表示する変数を作る必要があります。理解していますか? –

-1

ローカル変数とグローバル変数を作成できます。 グローバル変数は、アクセス可能なクラスのインスタンスを作成した場合でも、クラス内のどこからでもアクセスできます。 しかし、メソッドの外部からアクセスできないメソッドの内部にローカル変数を作成しています。

解決策は、viewDidload()メソッドの外で変数を作成し、メソッド内でその変数にアクセスし、値を割り当てることです。

printステートメントはクロージャーの内側にありますので、変数のselfプロパティを使用でき、値を割り当てることができます。後で変数を再利用することができ、どこからでも値を再利用できます。

+0

refを "期待される宣言"と言うクラスに移動することはできません。 –

+0

私はあなたが既にグローバル変数のようなクラスのrefを宣言したと思います。私はあなたが達成しようとしていることを知っているかもしれませんか? –

+0

コードでtxtをダウンロードしてチェックしてもよろしいですか? [link](https://ufile.io/iv8kb) –

関連する問題