Swift 创建泛型类型的可编码结构

Swift 创建泛型类型的可编码结构,swift,codable,Swift,Codable,首先,很抱歉问题的标题不清楚 我正在制作一个可编码的结构,它将被用作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 {..

首先,很抱歉问题的标题不清楚

我正在制作一个可编码的结构,它将被用作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 {...}
声明
消息
时,如果其
类型
内容
,则其
内容
的类型应为
内容

let message = Message(
    type: .content,
    content: Content( ... )
}
类型
请求
时,其
内容
的类型应为
请求

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,所以我想用更聪明的方式来处理这个问题

使用以下通用方法:

struct Message<T:Codable>: Codable{
    var type: MessageType
    var content: T
}
struct消息:可编码{
变量类型:MessageType
var含量:T
}

使用通用代码,如下所示:

struct Message<T:Codable>: Codable{
    var type: MessageType
    var content: T
}
struct消息:可编码{
变量类型:MessageType
var含量:T
}

消息中尝试此操作

var content: [String: Any]

消息中尝试此操作

var content: [String: Any]

内容和请求是字典?不,
content
request
也是可编码结构。顺便说一句,可编码结构总是字典使用它作为动态的试试这个[string:Any],然后映射你的objectoops,我会试试。内容和请求是字典?不,
content
request
是可编码结构,也是。顺便说一句,codable struct总是字典将其作为动态使用试试这个[string:Any],然后映射你的objectoops,我会试试。谢谢你的帮助,但它给了我
类型“Message”不符合协议“Decodable”的错误;(这是因为没有在消息结构中定义密钥。谢谢您的帮助,但它给了我
类型“Message”不符合协议“Decodable”
的错误;(这是因为没有在消息结构中定义密钥。非常感谢,我不知道泛型!非常感谢,我不知道泛型!