swift - 使用通用类型创建可编码结构

标签 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 {...}

在声明Message时,如果它的typecontent,那么它的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)中使用它,所以我想获得更聪明的方法来处理这个问题。

最佳答案

像下面这样使用泛型:

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

关于swift - 使用通用类型创建可编码结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50674721/

相关文章:

swift - 安装用于 firebase 的 cocoapods 挂起并卡住

ios - 如何使标签的文本在图像之上看起来不错?

swift4 - Swift 4 使用 Codable 解码 json

json - 无法解析通用 Codable

json - 如何根据 'type' 为多个结构手动实现 Codable?

ios - 折线图中未显示的数据点

swift - 谷歌地图 GMSCameraUpdate 缩放最小化 swift 5

ios - 从字符串中提取 5 位邮政编码

ios - 如何从 iOS Swift Codable 中的 API 响应通知或打印模型类上缺少的键?

json - 使用 Swift JSONDecoder 处理 JSON