How to use Codable protocol in objective c data model class?

后端 未结 1 1427
日久生厌
日久生厌 2020-12-16 13:55

I am working on mix and match iOS source code. I have implemented codable for swift data model class which reduces the burden of writing parser logic. I tried to conform my

相关标签:
1条回答
  • 2020-12-16 14:44

    Yes, you can use Codable together with Obj-C. The tricky part is that because Obj-C can't see Decoder, so you will need to create a helper class method when you need it to be allocated from Obj-C side.

    public class MyCodableItem: NSObject, Codable {
        private let id: String
        private let label: String?
    
        enum CodingKeys: String, CodingKey {
            case id
            case label
        }
    
        @objc public class func create(from url: URL) -> MyCodableItem {
            let decoder = JSONDecoder()
            let item = try! decoder.decode(MyCodableItem.self, from: try! Data(contentsOf: url))
            return item
        }
    
        public required init(from decoder: Decoder) throws {
            let container = try decoder.container(keyedBy: CodingKeys.self)
            id = try container.decode(String.self, forKey: .id)
            label = try? container.decode(String.self, forKey: .label)
            super.init()
        }
    
        required init(coder decoder: NSCoder) {
            fatalError("init(coder:) has not been implemented")
        }
    }
    
    0 讨论(0)
提交回复
热议问题