intsig171 / SmartCodable

SmartCodable is a data parsing library based on Codable. It is simple to use, with robust compatibility being one of its main features. SmartCodable 是基于Codable实现的数据解析库。简单易用,强悍的兼容性是SmartCodable的主要特点。 表层API和功能几乎和HandyJSON一致,支持快速的迁移。
https://smart-codable.vercel.app
MIT License
417 stars 43 forks source link

使用属性包装器的属性可以兼容一下吗 #31

Closed ZhangEason666 closed 4 months ago

intsig171 commented 4 months ago

详细描述一下。 并提供一个示例。

ZhangEason666 commented 4 months ago

import Foundation

@propertyWrapper final class Atomic { private var lock: NSRecursiveLock = NSRecursiveLock()

private var value: Value
var wrappedValue: Value {
    get {
        lock.lock(); defer { lock.unlock() }
        return value
    }
    set {
        lock.lock(); defer { lock.unlock() }
        value = newValue
    }
}

init(wrappedValue value: Value) {
    self.value = value
}

}

struct TestModel: SmartCodable { @Atomic var storeMap: [String: OtherModel] }

我们自定义了一个锁对storeMap的 set 、get进行防护,在对TestModel遵循SmartCodable时提示 does not conform to protocol 'Decodable'、does not conform to protocol 'Encodable'。 应该是Atomic中传入的泛型Codable时无法获取具体类型,从而无法进行Codable转换

intsig171 commented 4 months ago

你可以参考IgnoredKey.swift的实现,自己实现一下你的属性包装器。 可以加一下QQ群,详细沟通。