簡體   English   中英

創建具有通用類型的可編碼結構

[英]Create codable struct with generic type

首先,很抱歉問題標題不清楚

我正在制作一個可編碼的結構,它將用作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等不同平台上使用它,所以我想找到一種更智能的方式來處理它。

使用如下通用名稱:

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

消息結構中嘗試一下

var content: [String: Any]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM