Coding is more Swifty NSCoding. It can archive even pure Swift class and struct.
struct DataModel: Coding {
    let string: String
    let integer: Int
    let double: Double
    
    enum Key: String {
        case string
        case integer
        case double
    }
    
    func encode(with coder: Encoder<Key>) {
        coder.encode(string, for: .string)
        coder.encode(integer, for: .integer)
        coder.encode(double, for: .double)
    }
    
    static func decode(with decoder: Decoder<Key>) -> DataModel? {
        guard let string = decoder.decodeString(for: .string) else { return nil }
        let integer = decoder.decodeInteger(for: .integer)
        let double = decoder.decodeDouble(for: .double)
        return DataModel(string: string, integer: integer, double: double)
    }
}
let model: DataModel = DataModel(string: "Hello", integer: 123, double: 3.14)
let data: Data = model.archive()
let unarchivedModel: DataModel = DataModel.unarchive(with: data)github "tattn/Coding"- Fork it!
- Create your feature branch: git checkout -b my-new-feature
- Commit your changes: git commit -am 'Add some feature'
- Push to the branch: git push origin my-new-feature
- Submit a pull request :D
Coding is released under the MIT license. See LICENSE for details.