Firebase + Swift。 如何删除数据。

作为Firebase的“早期”用户之一,我建议将其实施到我所有客户的项目中。 我喜欢便利性,也喜欢Firebase的强大功能。

在这个故事中,我将说明如何使用Swift从Firebase删除数据。

假设我们已经构建了一个名为Post的社交媒体应用程序。 这是每个社交媒体产品中使用的非常常见的模型。

一个简单的例子可能是:

  struct Post {let userID:String 
let postID:字符串
让标题:字符串
let imageURL:字符串
}

例如,此帖子模型包含发布了该帖子的用户的userID,标题(和可选文本)以及一个imageURL。 存储更多的元数据(例如已发布该数据的用户的名称),也许是化身的链接,日期戳,位置等,将是非常常见的。

但是最重​​要的部分是postID。 postID是我们将用于存储和删除帖子的内容。

记住,我们需要postID(就像我们的userID)一样100%唯一,这非常重要。 2个具有相同ID的帖子会互相覆盖,并导致无尽的问题。

Firebase包含创建唯一子ID的功能,但为了使其变得简单,我们在这里仅使用1970年以来的毫秒数。软件开发中一个非常常见的变量。 并且在同一毫秒内独一无二。

 扩展日期{var asUUID:字符串{ 
让asInteger = Int(self.timeIntervalSince1970)
返回String(asInteger)
}
}

在我们的小助手扩展程序中,我们将创建一个String,该字符串可用于生成一个随机的postID,该ID也可以在生成帖子的日期同时工作。 再有,这种方法不能保证我们的帖子保持唯一性,因此不能扩展,因为自1970年以来,有2个用户可能在完全相同的毫秒内创建了一个帖子。对于拥有10亿用户的Instagram,我相信这很常见。 对于我们的示例,有2个假设用户没有。

我们可以通过调用以下内容来初始化对象:

  let post = Post(userID:user.userID, 
postID:Date()。asUUID,
标题:“用户输入的标题”,
imageURL:“ http:// theLinkToTheImage”

上载post对象后,我们的Firebase结构可能如下所示,其中1535423643是Post对象的postID。

要遵循当前的方法,重要的是我们使用postID作为最后一个孩子来存储帖子。 例如:

  self.firebaseReference.child(“ Posts”)。child(post.postID) 

如果现在要删除此帖子,则可以创建一个经理类作为帮助程序,我们可以调用该管理器类以单行删除帖子。

为不同的逻辑部分创建不同的类是一个很好的主意。 这种方法被称为“关注分离”。 它为我们提供了易于维护和测试的干净代码。 这样的类的一个示例是:

 类FirebaseManager {静态让共享= FirebaseManager() 
私人让参考= Database.database()。reference()
} // MARK:-删除功能
扩展名FirebaseManager {公共功能removePost(withID:String){

让参考= self.reference.child(“帖子”).child(withID)
reference.removeValue {错误,_ in
打印(error.localizedDescription)
}
}
}

删除帖子并调用函数,我们需要做的是:

  FirebaseManager.shared.removePost(withID:post.postID) 
// 要么
FirebaseManager.shared.removePost(withID:“ 1535423643”)

重要的收获是,为了能够从Firebase中删除孩子,我们需要存储对其ID的引用,并设置其自己的ID路径。 或将路径存储到模型中。 例如,如果我们要删除ID为123的对象,则在Firebase中,我们需要将找到对象的最低子对象设置为123。

现在玩吧! 别忘了留下一些爱。