Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Easy failable properties in Swift Codable.

License

Notifications You must be signed in to change notification settings

sochalewski/EasyCodable

Repository files navigation

EasyCodable

Easy failable optional enum properties in Swift Codable.

Installation

You can add EasyCodable to an Xcode project by adding it as a package dependency.

  1. From the File menu, select Add Packages...
  2. Enter https://github.com/sochalewski/EasyCodable into the package repository URL text field.
  3. Add the package to your app target.

Why?

Consider the following data model:

struct Car: Codable {
 enum Manufacturer: String, Codable {
 case toyota, volkswagen, ford, honda, generalMotors
 }
 
 var manufacturer: Manufacturer?
 var vin: String?
 var owner: String?
}

Everything works perfectly if the received JSON matches the available Manufacturer enum values, like this:

{
 "manufacturer": "toyota",
 "vin": "JT4RN67S0G0002845",
 "owner": null
}

But Car.manufacturer is optional, so it makes sense to have a valid model, even if the received manufacturer doesn't match one of the currently supported ones:

{
 "manufacturer": "tesla",
 "vin": "5YJSA2DP8DFP22249",
 "owner": "Elon Musk"
}

Unfortunately decoding this with JSONDecoder results in getting nil for the whole Car instead of just Car.manufacturer.

This can be solved by custom init(from:) of the Decodable protocol, but that's a lot of boilerplate, especially when you have dozens of enums in your models.

This is where EasyCodable comes in!

Usage

Just add the @EasyNil property wrapper to your optional RawRepresentable properties.

struct Car: Codable, Equatable {
 enum Manufacturer: String, Codable {
 case toyota, volkswagen, ford, honda, generalMotors
 }
 
 @EasyNil var manufacturer: Manufacturer?
 var vin: String?
 var owner: String?
}

Author

Piotr Sochalewski, sochalewski.github.io

About

Easy failable properties in Swift Codable.

Topics

Resources

License

Stars

Watchers

Forks

Languages

AltStyle によって変換されたページ (->オリジナル) /