首先,很抱歉问题的标题不清楚
我正在制作一个可编码的结构,它将用作 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
时,如果它的type
是content
,那么它的content
的类型应该是内容
。
let message = Message(
type: .content,
content: Content( ... )
}
当type
为request
时,其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/