withBlockステートメントで外側のオブジェクト値を変更する方法に関する問題があります。Swift withBlockステートメントの外側のオブジェクト値を変更する方法
func finduserbyid(uid: Int) -> User{
var current_user = User()
let display_ref = self.users_ref.child(String(uid))
display_ref.observeSingleEventOfType(.Value, withBlock: {(snapshot) in
let current_user_dic = snapshot.value as! NSDictionary
current_user.uid = current_user_dic["uid"] as! Int
})
{ (error) in
print (error)
print(error.localizedDescription)
}
return current_user
}
これは私がfirebaseスナップショットFUNCの外へのuserinfoを引っ張ってみてください機能は次のとおりです。
は、ここに私のコードです。
私は、関数がuser.uidの変更行に実行されたことがわかりました。 返されたオブジェクトのユーザーは常に空です
誰かが間違っている部分を指摘してください。
この質問は1か月前のようにありました。
解決策がまだ見つかりませんでした。
と私は同じ入力と他のviewcontrollersでそれを実行しようとした場合のみ、最初のViewControllerで実行します。この機能は、それは私にエラーがスローされます。fatal error: unexpectedly found nil while unwrapping an Optional value
と私のブレークポイントに応じてエラーがでhappendsをこのコード行。
display_ref.observeSingleEventOfType(.Value, withBlock: {(snapshot) in
これは私が常に機能に気づかなかった
とwithblockコード
{
age = 0;
chats = (
0
);
"course_enroll" = (
""
);
"create_time" = "1466705475370.6";
department = "";
"display_name" = "HL";
"email_address" = "[email protected]";
"follow_count" = 0;
"follow_list" = (
0
);
"follower_count" = 0;
"follower_list" = (
0
);
friendlist = (
0
);
gender = "";
history = (
0
);
language = "";
level = 0;
phone = 0;
"rating_point" = 0;
reputation = 0;
"signed_events" = (
0
);
uid = 101;
}内部のプリントcurrent_user_dic出力であるが、二回ハンドルをErrorに最初strightを実行し、二回目は通過します本体。 私はこのように私のViewControllerでそれを呼ばれる:
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
let user = database.finduserbyid(101)
print(user.display_name)
print(user.email_address)
print("1")
本当にわかりません。 user.uidの変更は何ですか? – Shubhank
current_user.uid = current_user_dic ["uid"] as!コード –
のこの行は、それはゼロになります。これを理解するために参照してくださいhttp://stackoverflow.com/questions/37639601/how-to-retrieve-objects-from-firebase-by-key-value/37639623#37639623 – Shubhank