- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我已经查看了数小时的代码和注释,但我正在努力寻找任何可以帮助我在带有 firebase 的 swift 应用程序中对对象进行投票和投票的文档。
我有一个照片库,我希望为图像添加 Instagram 风格的点赞。用户已经使用 firebase auth 登录,所以我有他们的用户 ID。
我只是在努力想出方法以及需要在 firebase 中设置什么规则。
任何帮助都会很棒。
最佳答案
我将描述我如何在社交网络应用程序中实现这样的功能 Impether使用 Swift
和 Firebase
。
由于赞成票和反对票是类似的,我将只描述赞成票。
总体思路是将点赞计数器直接存储在与计数器相关的图像数据对应的节点中,并使用事务写入更新计数器值以避免数据不一致。
例如,假设您将单个图像数据存储在路径 /images/$imageId/
中,其中 $imageId
是用于标识特定图像的唯一 ID图像 - 它可以由函数 childByAutoId 生成包含在适用于 iOS 的 Firebase 中。然后在该节点对应于单张照片的对象如下所示:
$imageId: {
'url': 'http://static.example.com/images/$imageId.jpg',
'caption': 'Some caption',
'author_username': 'foobarbaz'
}
我们要做的是给这个节点添加一个投票计数器,所以它变成:
$imageId: {
'url': 'http://static.example.com/images/$imageId.jpg',
'caption': 'Some caption',
'author_username': 'foobarbaz',
'upvotes': 12,
}
当您创建新图像时(可能是在用户上传图像时),您可能希望使用 0
或其他一些常量来初始化点赞计数器值,具体取决于您想要实现的目标.
在更新特定点赞计数器时,您希望使用事务以避免其值不一致(当多个客户端想要同时更新计数器时可能会发生这种情况)。
幸运的是,在 Firebase
和 Swift
中处理事务性写入非常简单:
func upvote(imageId: String,
success successBlock: (Int) -> Void,
error errorBlock: () -> Void) {
let ref = Firebase(url: "https://YOUR-FIREBASE-URL.firebaseio.com/images")
.childByAppendingPath(imageId)
.childByAppendingPath("upvotes")
ref.runTransactionBlock({
(currentData: FMutableData!) in
//value of the counter before an update
var value = currentData.value as? Int
//checking for nil data is very important when using
//transactional writes
if value == nil {
value = 0
}
//actual update
currentData.value = value! + 1
return FTransactionResult.successWithValue(currentData)
}, andCompletionBlock: {
error, commited, snap in
//if the transaction was commited, i.e. the data
//under snap variable has the value of the counter after
//updates are done
if commited {
let upvotes = snap.value as! Int
//call success callback function if you want
successBlock(upvotes)
} else {
//call error callback function if you want
errorBlock()
}
})
}
上面的片段实际上几乎就是我们在生产中使用的代码。希望对您有所帮助:)
关于swift - Swift 中通过 Firebase 的赞成票/反对票系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37061536/
我有以下 PHP 脚本: '; echo ''; echo 'Return to lesson'; echo ''; die(); } include 'mysqlserver.php'; $con
上箭头.gif 和下箭头.gif 所以,它看起来像这样: 我如何创建 3 个 div 并使用 CSS 设置它们的样式,使这些箭头位于顶部箭头位于底部箭头上方的位置? 我应该创建一个宽度受
我是一名优秀的程序员,十分优秀!