Latest 1.0.7
Homepage https://github.com/douban/Polymorph
License BSD
Platforms ios 5.0, osx 10.7, requires ARC
Dependencies libextobjc/EXTScope, libextobjc/RuntimeExtensions
Authors

License
CocoaPods
CocoaPods
Build Status
Codecov

Polymorph transforms the enemy into a sheep.

Transform value of dictionary to property of Objective-C class, by using a @dynamic like directive.

Usage

Say we have a Movie class.

@interface Movie : PLMModel

@property (nonatomic, readonly) NSString *identifier;
@property (nonatomic, readonly) NSString *title;
@property (nonatomic, readonly) NSString *year;
@property (nonatomic, readonly) NSString *subtype;
@property (nonatomic, readonly) float rating;
@property (nonatomic, readonly) NSArray<Celebrity *> *casts;

@end

Instead of implementing accessor methods for each property, we can use plm_dynamic macro to generate getter and setter automatically.

@implementation Movie

// Property `identifier` comes from `id` field。
@plm_dynamic(identifier, @"id")

// Property `title` comes from field with same name `title`.
@plm_dynamic(title)

// `year` and `subtype` comes from fields with same names.
@plm_dynamic_multi(year, subtype)

// `rating` comes from `rating.average` keypath. Field value will be transformed to `float` as it's declared.
@plm_dynamic_keypath(rating, @"rating.average")

// `casts` comes from `casts` field. Field value, which is an object array, will be transformed to NSArray with Celebrity instance.
@plm_dynamic(casts, @"casts", PLMArrayTransformerNameForClass([Celebrity class]))

@end

plm_dynamic macro associate property and dictionary field, use NSValueTransformer to transform dictionary value to declared type. See comments in Polymorph.h for detailed usage.

Without inheritance

You can also use Polymorph without extending PLMModel. Conform to PLMRawDataProvider protocol, invoke plm_activate, and you are ready to go.

License

Polymorph is released under BSD license. See LICENSE for more.

Latest podspec

{
    "name": "Polymorph",
    "version": "1.0.7",
    "summary": "Transform value of dictionary to property of Objective-C class.",
    "description": "Transform value of dictionary to property of Objective-C class, by using an`@dynamic` like directive.",
    "homepage": "https://github.com/douban/Polymorph",
    "authors": {
        "Tony Li": "[email protected]"
    },
    "source": {
        "git": "https://github.com/douban/Polymorph.git",
        "tag": "v1.0.7"
    },
    "license": {
        "type": "BSD",
        "file": "LICENSE"
    },
    "source_files": "Polymorph/**/*.{h,m}",
    "requires_arc": true,
    "platforms": {
        "ios": "5.0",
        "osx": "10.7"
    },
    "dependencies": {
        "libextobjc/EXTScope": [
            "~> 0.4"
        ],
        "libextobjc/RuntimeExtensions": [
            "~> 0.4"
        ]
    }
}

Pin It on Pinterest

Share This