【发布时间】:2019-09-04 19:00:32
【问题描述】:
我正在与之交谈的服务器需要以下格式的消息:
{
"command": "subscribe",
"identifier": "{\"channel\": \"UserChannel\"}",
"data": "{\"key\": \"value\"}"
}
identifier 和 data 值是转义的 json 字符串。
到目前为止我有这个:
struct ActionCableMessage<Message: Encodable>: Encodable {
let command: Command
let identifier: CableChannel
let data: Message?
func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(command, forKey: .command)
try container.encode(identifier, forKey: .identifier) // ????
}
private enum CodingKeys: String, CodingKey {
case command, identifier, data
}
}
但我不知道从这里做什么。我想我需要一个CableChannel 和Message 可以符合的protocol,并提供一个实现encode (to encoder: Encoder) 的extension func,它确保Encoder 必须是JSONEncoder,如果是这样,使用将它自己的值重写为转义的 json 字符串。
我还需要将其解码回ActionCableMessage 结构,但我还没有做到这一点。
【问题讨论】: