特性
init(from decoder: Decoder)
struct Foo: Serializable {
@Serialized
var bar: String
@Serialized("globalId")
var id: String?
@Serialized(alternateKey: "mobileNumber")
var phoneNumber: String?
@Serialized(default: 0)
var score: Int
}
将此行添加到你的 Podfile
中
pod 'SerializedSwift'
如果你使用 SPM 作为你的依赖管理工具,请将此添加到你的 Package.swift
文件中的依赖项中
dependencies: [
.package(url: "https://github.com/dejanskledar/SerializedSwift.git")
]
class User: Serializable {
@Serialized
var name: String
@Serialized("globalId")
var id: String?
@Serialized(alternateKey: "mobileNumber")
var phoneNumber: String?
@Serialized(default: 0)
var score: Int
required init() {}
}
无需额外的解码逻辑
class PowerUser: User {
@Serialized
var powerName: String?
@Serialized(default: 0)
var credit: Int
}
无需额外的解码逻辑
class ChatRoom: Serializable {
@Serialized
var admin: PowerUser?
@Serialized(default: [])
var users: [User]
}
你可以创建自己的自定义 Transformable 类,用于自定义转换逻辑。
class DateTransformer: Transformable {
static func transformFromJSON(from value: String?) -> Date? {
let formatter = DateFormatter()
return formatter.date(from: value ?? "")
}
static func transformToJson(from value: Date?) -> String? {
let formatter = DateFormatter()
return formatter.string(from: value ?? Date())
}
}
struct User: Serializable {
@SerializedTransformable<DateTransformer>
var birthDate: Date?
}
SerializableEncodable
& SerializableDecodable
的类型别名nil
。 对于非可选属性,建议使用默认值,以避免崩溃@Serialized("mainKey", alternativeKey: "backupKey", default: "")
var key: String?
class DateTransformer: Transformable {
static func transformFromJSON(from value: String?) -> Date? {
let formatter = DateFormatter()
return formatter.date(from: value ?? "")
}
static func transformToJson(from value: Date?) -> String? {
let formatter = DateFormatter()
return formatter.string(from: value ?? "")
}
}
// Usage of `SerializedTransformable`
struct User: Serializable {
@SerializedTransformable<DateTransformer>
var birthDate: Date?
}
这仅仅是使用 Property Wrappers 可以实现的功能以及如何改进 Swift 中 JSON 解码和编码的冰山一角。 欢迎合作。