这将是 Swift 3 中 addValueEventListener 的等效命令

Posted

技术标签:

【中文标题】这将是 Swift 3 中 addValueEventListener 的等效命令【英文标题】:Which would be the equivalent command for addValueEventListener in Swift 3 【发布时间】: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
        

【问题讨论】:

代码有什么问题? 【参考方案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) 

【讨论】:

以上是关于这将是 Swift 3 中 addValueEventListener 的等效命令的主要内容,如果未能解决你的问题,请参考以下文章

使用 Swift 创建 Flutter 项目

无法弄清楚 Swift 中 AudioQueueDispose 的用法

Swift:从 url 检索音频文件标记列表?

这将是啥输出?也请解释一下[关闭]

做开发的都看看!大佬熬夜总结的腾讯后台开发岗面经,这将是你进大厂的敲门砖!

如何使用文本字段将数字输入数组(swift3)