Swift声明符合字典

时间:2018-01-22 04:50:51

标签: swift dictionary generics encode

我正在使用此功能

public mutating func encodeIfPresent<T>(_ value: T?, forKey key: KeyedEncodingContainer.Key) throws where T : Encodable

编码实体

但是我的实体包含一个字典,我也想用这个函数来编码

encodeIfPresent接受符合Encodable协议的通用值。

如何声明我的字典var customFields: [String: Encodable.Type]?var customFields: [String: T] where T : Encodable以允许将字典的值传递给该函数?

注意:这两种方法只是我尝试但失败的例子。

1 个答案:

答案 0 :(得分:0)

我的问题可能与此Store Encodables in a Swift Dictionary

重复

使用它的第一个解决方案,我做到了。

struct EncodableValue: Encodable {
    let value: Encodable

    func encode(to encoder: Encoder) throws {
        try value.encode(to: encoder)
    }
}


public struct JWTPayload: Codable {
    var customFields: [String: EncodableValue]?
}

//how to use it
payload.customFields = ["name": EncodableValue(value: "wang"),
                                "isAdmin": EncodableValue(value: true),
                                "age": EncodableValue(value: 125),
                                "height": EncodableValue(value: 181.5)]