使用泛型类型创建可编码结构

问题描述 投票:1回答:2

首先,对不明确的问题标题表示抱歉

我正在制作一个可编码的结构,用作json消息。

enum MessageType: String, Codable{
    case content
    case request
    case response
}

struct Message: Codable{
    var type: MessageType
    var content: /* NEED HELP HERE */
}

struct Content: Codable {...}
struct Request: Codable {...}
struct Response: Codable {...}

当宣布Message时,如果它的typecontent,它的content的类型应该是Content

let message = Message(
    type: .content,
    content: Content( ... )
}

typerequest时,它的content的类型应该是Request

let message = Message(
    type: .request,
    content: Request( ... )
}

然后,我应该如何设置content属性的类型?

我试着像这样做String

struct Message: Codable{
    var type: MessageType
    var content: String
}

struct Content: Codable{
    var jsonString: String{
        return String(data: try! JSONEncoder().encode(self), encoding: .utf8)
    }
}

let foo = Message(
    var type: .content,
    var content: Content ( ... ).jsonString
)

我可以使用它,但我知道在Android等不同平台上使用它,所以我想要更聪明的方式来处理这个问题。

swift codable
2个回答
3
投票

使用如下通用:

struct Message<T:Codable>: Codable{
    var type: MessageType
    var content: T
}

0
投票

在Message Struct中尝试这个

var content: [String: Any]
© www.soinside.com 2019 - 2024. All rights reserved.