创建具有通用类型的可编码结构

Cya*_*Lee 1 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 {...}
struct Request: Codable {...}
struct Response: Codable {...}
Run Code Online (Sandbox Code Playgroud)

声明Message(如果type是)时content,其content类型应为Content

let message = Message(
    type: .content,
    content: Content( ... )
}
Run Code Online (Sandbox Code Playgroud)

type为is时request,其content类型应为Request

let message = Message(
    type: .request,
    content: Request( ... )
}
Run Code Online (Sandbox Code Playgroud)

然后,我应该如何设置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
)
Run Code Online (Sandbox Code Playgroud)

我可以使用它,但是我知道要在Android等不同平台上使用它,所以我想找到一种更智能的方式来处理它。

SPa*_*tel 5

使用如下通用名称:

struct Message<T:Codable>: Codable{
    var type: MessageType
    var content: T
}
Run Code Online (Sandbox Code Playgroud)