ios - 布尔条件在 Swift 中不起作用
问题描述
我正在使用消息工具包。在 chatDashbaord 扩展中,我有布尔条件,例如如果 isnewConversation 包含 true,则调用函数 insertConversation2,如果 isnewConversation 包含 false,则调用函数 sendMessag。但是我已经使用断点检查了代码不会进入 isNewconversation 块,我不知道为什么会这样。当我不使用布尔语句时,代码工作文件并将数据附加到数组中,请检查代码谢谢。
消息视图控制器:
class ChatDashboard: MessagesViewController {
var userActive: String? = nil
var receiverName:String? = nil
var isnewConversation = false
var recevierName:String? = nil
var otheruserEmail: String? = nil
var conversationId:String? = nil
var messages : [Message] = []{
didSet{
DispatchQueue.main.async {
self.messagesCollectionView.reloadDataAndKeepOffset()
}
}
扩展 ChatDashboard:
extension ChatDashboard: InputBarAccessoryViewDelegate{
func inputBar(_ inputBar: InputBarAccessoryView, didPressSendButtonWith text: String) {
guard !text.replacingOccurrences(of: "", with: "").isEmpty,let selfSender =
self.selfSender,let messageId = createMessageId() else{
return
}
let message = Message(sender: selfSender, messageId: messageId, sentDate: Date(), kind: .text(text))
guard let otheruserEmail = otheruserEmail,let recevierName = recevierName else {return}
if isnewConversation{
NetworkingService.shared.insertConversation2(with:otheruserEmail,name:recevierName, message: message) { (success) in
if success{
print("message Send")
self.isnewConversation = false
}
else{
print("not send")
}
}
}
else{
guard let converId = conversationId else {return}
NetworkingService.shared.sendMessage(converId,recevierName,message) { (success) in
if success{
print("message send in")
}
else{
print("message not send")
}
}
}
}
}
}
条件为 false 时的 SendMessage func 代码:
func sendMessage(_ convesationId:String,_ name:String,_ message:Message,completion:@escaping(Bool) -> Void){
self.sendMessageReciverToSender(convesationId) { (user) in
guard var receiverToSenderNdoe = user else {completion(false); return}
let dformatter = DateFormatter()
dformatter.dateFormat = "dd/MM/yyy HH:mm"
let dateToString = dformatter.string(from: Date())
guard let email = UserDefaults.standard.value(forKey: "useremail") as? String else {
print("Email not found in user default")
completion(false)
return
}
let currentUserEmail = getUserEmail(currentEmail: email)
var messageData = ""
switch message.kind{
case .text(let messageText):
messageData = messageText
default:
break
}
let newMessge: [String:Any] = [
"id":message.messageId,
"type":message.kind.messageKindString,
"content":messageData,
"date": dateToString,
"sender_email":currentUserEmail,
"is_read":false,
"name":name
]
//issues is here
if var conversationData = receiverToSenderNdoe["messages"] as? [[String:Any]]{
conversationData.append(newMessge)
receiverToSenderNdoe["messages"] = conversationData
self.reciverToSenderSave(convesationId, newMessge) { (result) in
if result{
completion(true)
}
else{
completion(false)
}
}
}
}
}
在 sendMessage func 内部调用了这两个函数
func sendMessageReciverToSender(_ conversationId:String,completion:@escaping([[String:Any]]?) -> Void){
database.child("\(conversationId)/messages").observeSingleEvent(of: .value) { (snapshot) in
if let currentUser = snapshot.value as? [[String:Any]]{
completion(currentUser)
}
else{
print("errro in reciver to sender sendMessageReciverToSender func ")
completion(nil)
}
}
}
func reciverToSenderSave(_ conversationId:String,_ conversation:[[String:Any]],completion:@escaping(Bool)-> Void){
database.child("\(conversationId)/messages").setValue(conversation){(error,ref) in
if error == nil{
completion(true)
}
else{
print("eroor in receiptin \(error?.localizedDescription)")
completion(false)
}
}
}
解决方案
您在这里sendMessage
有without
回电completion
guard var receiverToSenderNdoe = user else {return}
应该
guard var receiverToSenderNdoe = user else { completion(false) ; return }
和这里
guard let email = UserDefaults.standard.value(forKey: "useremail") as? String else {
print("Email not found in user default")
return
}
应该
guard let email = UserDefaults.standard.value(forKey: "useremail") as? String else {
print("Email not found in user default")
completion(false)
return
}
您必须确保处理所有路径,以便在成功/失败中调用您的回调,顺便说一句,像这样
if result{
completion(true)
}
else{
completion(false)
}
可能很快
completion(result)
推荐阅读
- json - 使用 jq 1.5 将文件中的对象与通配符一起替换到 main.json
- regex - 您如何将所有内容与下一个捕获的组匹配?
- javascript - 尝试使用 vue 和 webpack 安装 keycloak-js 时出现未捕获的类型错误:__WEBPACK_IMPORTED_MODULE_3_keycloak_js__ is not a function
- android - CoordinatorLayout 在全屏对话框中为 BottomSheet 添加额外空间
- swift - 如何在 RxSwift 中将多个数据模型绑定到 TableView
- javascript - 视图源角度 8 中未显示 Html 数据
- php - 使用 Ajax 触发 php 块
- javafx - 如何在 javafx textarea 中显示计数查询的所有行?它只显示第一行而不是两行
- python - 当夹具在 pytest 的不同文件中定义时,夹具不可见
- c# - 将 csv 导入 mongo db