【发布时间】:2018-07-10 10:23:26
【问题描述】:
这个错误的解决方法是什么?我尝试了我找到的东西,但我无法解决我的问题。
错误在这里:
if var post = currentData.value as? [String : Any], let uid = Auth.auth().currentUser!.uid {
完整代码:
func incrementLikes(postId: String, onSucess: @escaping (Post) -> Void, onError: @escaping (_ errorMessage: String?) -> Void) {
let postRef = Api.Post.REF_POSTS.child(postId)
postRef.runTransactionBlock({ (currentData: MutableData) -> TransactionResult in
if var post = currentData.value as? [String : Any], let uid = Auth.auth().currentUser!.uid {
var likes: Dictionary<String, Bool>
likes = post["likes"] as? [String : Bool] ?? [:]
var likeCount = post["likeCount"] as? Int ?? 0
if let _ = likes[uid] {
likeCount -= 1
likes.removeValue(forKey: uid)
} else {
likeCount += 1
likes[uid] = true
}
post["likeCount"] = likeCount as AnyObject?
post["likes"] = likes as AnyObject?
currentData.value = post
return TransactionResult.success(withValue: currentData)
}
return TransactionResult.success(withValue: currentData)
}) { (error, committed, snapshot) in
if let error = error {
onError(error.localizedDescription)
}
if let dict = snapshot?.value as? [String: Any] {
let post = Post.transformPostPhoto(dict: dict, key: snapshot!.key)
onSucess(post)
}
}
}
我不知道如何直接添加图片。对不起
【问题讨论】:
-
Auth.auth().currentUser!.uid显然,这不是可选的,所以if let someLetName = someNonOptionalVar应该会抛出该错误。我认为您的意思是let uid = Auth.auth().currentUser?.uid,因为可能未设置用户,这可能会导致崩溃(以及您在展开时避免的情况)。