Как рекурсивно кодировать мой пользовательский класс (с другими пользовательскими классами для свойств), используя codable? - PullRequest
0 голосов
/ 03 июля 2019
class SocketMsgBody  {
    var body : AnyObject
}

public class SocketMsg : NSObject,Codable {

    var msgType : SocketMsgType
    var msgBody : SocketMsgBody

    enum CodingKeys: String, CodingKey {
        case msgType = "msgType"
        case msgBody = "msgBody"
    }

    enum NestedCodingKeys: String, CodingKey {
        case body
    }

    public init(with type:SocketMsgType) {
        msgType = type
        msgBody = SocketMsgBody(for: msgType)
    }
    public func encode(to encoder: Encoder) throws {
        var container = encoder.container(keyedBy: CodingKeys.self)
        try container.encode(msgType, forKey: .msgType)

        var socketBodyInfo = container.nestedContainer(keyedBy: NestedCodingKeys.self, forKey: .msgBody)
        try socketBodyInfo.encode(msgBody, forKey: .body)
    }
    public func serialize() throws -> String? {
        let encoder = JSONEncoder()
        guard let data = try? encoder.encode(self) else { return nil }
        let str = String(data: data, encoding: .utf8)
        return str
    }
}

Я тоже хочу закодировать msgbody, как мне это сделать?

...