如何创建包含不同Encodable类型值的字典?
如何让Swift字典支持多种遵循Encodable的类型作为值传递给函数?
你的问题出在泛型参数T的约束上:原函数要求字典中所有值必须是同一类型的T(且遵循Encodable),但当你传入混合类型(比如Int和Location)时,编译器无法找到一个同时满足两种类型的T,因此编译失败。
要实现支持多种Encodable类型的字典,最简单的方案是直接将字典类型改为[String: Encodable],去掉泛型约束:
func getResource(_ params: [String: Encodable]) { // 函数实现逻辑 }
完整示例代码
import Foundation struct Location: Codable { static let zero = Location(latitude: 0, longitude: 0) let latitude: Double let longitude: Double } func getResource(_ params: [String: Encodable]) { let encoder = JSONEncoder() encoder.outputFormatting = .prettyPrinted do { let data = try encoder.encode(params) if let jsonString = String(data: data, encoding: .utf8) { print("编码结果:\n\(jsonString)") } } catch { print("编码失败:\(error.localizedDescription)") } } // 调用混合类型字典 getResource(["number": 1, "otherLocation": Location.zero])
为什么这个方案可行?
Encodable是Swift的协议,[String: Encodable]表示字典的值可以是任意遵循Encodable协议的类型,不管是基础类型(Int、String等)还是自定义的Codable结构体(比如Location),都能被正确识别和处理。
如果你的函数内部需要对参数进行JSON编码,JSONEncoder原生支持对[String: Encodable]类型的编码,不需要额外处理。
内容的提问来源于stack exchange,提问作者Aziz A
相关产品推荐
相关产品推荐

