用于处理 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
。