TypeError:无法读取未定义的属性“ messageBody”

时间:2018-10-31 18:54:41

标签: swift api heroku websocket socket.io

我想使用

通过api im在我的应用程序中发送消息

https://github.com/devslopes-learn/mac-chat-api

总是在我尝试发送消息时,我在heroku终端日志中收到此错误:

enter image description here

我尝试了一切,但似乎无法弄清为什么会发生。 顺便说一句,我正在Udemy上的一门课程中使用此api学习。

这是我的发射物

func sendMessage(messageBody: String, userId: String, channelId: String, completion: @escaping CompletionHandler) {
    let user = UserDataService.instance
    socket.emit("newMessage", messageBody, userId, channelId, user.name, user.avatarName, user.avatarColor)
    completion(true)
}

在这里我使用函数:

@IBAction func sendMsgPressed(_ sender: Any) {
    if AuthService.instance.isLoggedIn {
        guard let channelId = MessageService.instance.selectedChannel?.id else { return }
        guard let message = messageTxtField.text else { return }

        SocketService.instance.sendMessage(messageBody: message, userId: UserDataService.instance.id, channelId: channelId) { (success) in
            if success {
                self.messageTxtField.resignFirstResponder()
                self.messageTxtField.text = ""
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

浏览Swift here的SocketIOClient API文档,您没有传递正确的SocketData对象类型,而是传递了各个参数。您应该为数据创建一个符合SocketData的对象,以确保您的数据可以在socket.io数据包中表示。下面基本上是对文档中示例的重新编写:

struct CustomData: SocketData {
   let messageBody: String
   let userId: Int
   let channelId: Int
   let userName: String
   let avatarColor: String

   func socketRepresentation() -> SocketData {
       return [
           "messageBody": name, 
           "userId": userId,
           "channelId": channelId,
           "userName": userName,
           "avatarColor": avatarColor,
       ]
   }
}

let customData = CustomData(...)
socket.emit("newMessage", customData)