用于处理 Codable 类型作为 URLQueryItem 的编码器 & 解码器。
URLQueryItemCoder 提供了 Swift Encoder 协议的实现,适用于将 Encodable 类型编码为 URLQueryItem 数组;以及 Swift Decoder 协议的实现,适用于从 URLQueryItem 数组解码 Decodable 类型。
这允许我们将 URLQueryItem 的需求提升到类型系统层面 (例如,对 HTTP GET API 进行建模)。
URLQueryItemCoder 是一个全面的实现,拥有全面的测试套件。
支持协议所期望的所有标准特性。
支持 Swift JSON 实现提供的所有额外特性。
Data 特殊处理Date 特殊处理Double & Float 特殊处理URLQueryItemEncoder 可以通过其初始化器或 strategies 和 outputFormatting 属性进行配置。
例如,给定…
import URLQueryItemCoder
struct Interval: Codable {
let start: Date
let end: Date
}
struct GetPostsQuery: Codable {
let interval: Interval
let userID: String
}
let interval = Interval(start: .now.addingTimeInterval(-1_000), end: .now)
let query = GetPostsQuery(interval: interval, userID: "123abc")
然后…
let encoder = URLQueryItemEncoder(dateStrategy: .secondsSince1970)
let queryItems = try! encoder.encode(query)
// [
// URLQueryItem(name: "interval.end", value: "1681256918.240762"),
// URLQueryItem(name: "interval.start", value: "1681255918.240762"),
// URLQueryItem(name: "userID", value: "123abc"),
// ]
URLQueryItemDecoder 可以通过其初始化器或 strategy 属性进行配置。
例如,给定…
import URLQueryItemCoder
struct GetPostsQuery: Codable {
struct Interval: Codable {
let start: Date
let end: Date
}
let interval: Interval
let userID: String
}
let queryItems = [
URLQueryItem(name: "interval.start", value: "1681255918.240762"),
URLQueryItem(name: "interval.end", value: "1681256918.240762"),
URLQueryItem(name: "userID", value: "123abc"),
]
然后…
let decoder = URLQueryItemDecoder(dateStrategy: .secondsSince1970)
let query = try! decoder.decode(GetPostsQuery.self, from: queryItems)
// GetPostsQuery(
// interval: Interval(start: 1681255918.240762, end: 1681256918.240762),
// userID: "123abc"
// )
dependencies: [
.package(url: "https://github.com/kylehughes/URLQueryItemCoder.git", .upToNextMajor(from: "1.0.0")),
]
目前 URLQueryItemCoder 不接受源代码贡献。Bug 报告将被考虑。
URLQueryItemCoder 在 MIT 许可下可用。
有关详细信息,请参阅 LICENSE。