Swift 的属性包装器是语法糖,
他可以让代码更加的声明式
定义属性的时候,把规则写进去
属性包装器, 主要使用 wrappedValue, 有时候用到 projectedValue
问题:
存在这样的一个结构体:
struct Figure: Decodable {
var name: String
var age: Int
}
后端传过来,一个 json,
要求 json 对应的内容,长这样,
能够解析出来
var dict: [String: Any] = ["name": "666", "age": 666]
json 对应的内容,长这样,
也可解析出来
dict = ["name": 666, "age": "666"]
问题,解码一个属性,他的数据可能有多种类型
技巧一,使用属性包装器
提供解码方法
static var losslessDecodableTypes:
, 是一个解码方法的集合
系统提供的 LosslessStringConvertible
协议,可以让字符串,转值
public typealias LosslessStringCodable = LosslessStringConvertible & Codable
public struct LosslessDefaultStrategy<Value: LosslessStringCodable>{
public static var losslessDecodableTypes: [(Decoder) -> LosslessStringCodable?] {
@inline(__always)
func decode<T: LosslessStringCodable>(_: T.Type) -> (Decoder) -> LosslessStringCodable? {
return { try? T.