【问题标题】:Which would be the equivalent command for addValueEventListener in Swift 3这将是 Swift 3 中 addValueEventListener 的等效命令
【发布时间】:2017-06-28 07:07:11
【问题描述】:

我正在使用 Firebase 和 Swift 3,我想知道如何将其从我的 Android 应用程序转换为 Swift 3:

DatabaseReference signalReceivedReference = mFirebaseDatabase.getReference("users/" + mAuth.getCurrentUser().getUid() + "/signal_received");
      signalReceivedReference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                if(String.valueOf(dataSnapshot.getValue()).equals("true")){
                    showToast(getString(R.string.signalReceived));
                    dataSnapshot.getRef().setValue("false");
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

我试过了,但没用:

ref.child("users").child(userID!).child("signal_received").observeSingleEvent(of: .value, with: { (snapshot) in
            if(snapshot.value as! String == "true"){
                self.view.makeToast("Signal received")
                snapshot.ref.setValue("true")
            }
        }) { (error) in
        }

【问题讨论】:

  • 代码有什么问题?

标签: android ios firebase swift3 firebase-realtime-database


【解决方案1】:

您正在使用 addValueEventListener 来监听变化,而在 Swift 中您使用了 observeSingleEvent(of: .value, with: ...) 并且这只观察到一次值。您可以使用observe(.value, with: ...) 来收听变化。

ref.child("users/\(userID!)/signal_received").observe(.value, with: { (snapshot) in
    if(snapshot.value as! String == "true"){
        self.view.makeToast("Signal received")
        snapshot.ref.setValue("true")
    }
}) { print($0) }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-16
    • 1970-01-01
    • 2015-09-14
    • 2015-06-10
    • 1970-01-01
    • 2012-02-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多