From 7b02207537d35bfa1714bf8beafc921f717d100a Mon Sep 17 00:00:00 2001 From: 单军华 Date: Wed, 11 Jul 2018 10:47:42 +0800 Subject: [PATCH] 首次上传 --- screendisplay/Pods/MJExtension/README.md | 541 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 541 insertions(+), 0 deletions(-) diff --git a/screendisplay/Pods/MJExtension/README.md b/screendisplay/Pods/MJExtension/README.md new file mode 100644 index 0000000..5b4f7f9 --- /dev/null +++ b/screendisplay/Pods/MJExtension/README.md @@ -0,0 +1,541 @@ + + +MJExtension +=== +- A fast, convenient and nonintrusive conversion framework between JSON and model. +- ������������������������������������������������������������ + +GitHub���[CoderMJLee](https://github.com/CoderMJLee) ��� Blog���[mjios(Chinese)](http://www.cnblogs.com/mjios) ��� PR is welcome���or [feedback](mailto:richermj123go@vip.qq.com) + + +## Contents +* [Getting Started ������������������](#Getting_Started) + * [Features ������������������](#Features) + * [Installation ������������](#Installation) +* [Examples ������������](#Examples) + * [JSON -> Model](#JSON_Model) + * [JSONString -> Model](#JSONString_Model) + * [Model contains model](#Model_contains_model) + * [Model contains model-array](#Model_contains_model_array) + * [Model name - JSON key mapping](#Model_name_JSON_key_mapping) + * [JSON array -> model array](#JSON_array_model_array) + * [Model -> JSON](#Model_JSON) + * [Model array -> JSON array](#Model_array_JSON_array) + * [Core Data](#Core_Data) + * [Coding](#Coding) + * [Camel -> underline](#Camel_underline) + * [NSString -> NSDate, nil -> @""](#NSString_NSDate) + * [More use cases](#More_use_cases) + +--- + +# <a id="Getting_Started"></a> Getting Started������������������ + +## <a id="Features"></a> Features������������������ +- MJExtension��������������������������������������������������������������� +* `JSON` --> `Model`���`Core Data Model` +* `JSONString` --> `Model`���`Core Data Model` +* `Model`���`Core Data Model` --> `JSON` +* `JSON Array` --> `Model Array`���`Core Data Model Array` +* `JSONString` --> `Model Array`���`Core Data Model Array` +* `Model Array`���`Core Data Model Array` --> `JSON Array` +* Coding all properties of a model with only one line of code. + * ���������������������������������������������������������������Coding��������������������� + +## <a id="Installation"></a> Installation������������ + +### From CocoaPods���������CocoaPods��� + +```ruby +pod 'MJExtension' +``` + +### Manually������������������ +- Drag all source files under folder `MJExtension` to your project.������`MJExtension`������������������������������������������������ +- Import the main header file���`#import "MJExtension.h"`������������������������`#import "MJExtension.h"`��� + +```objc +MJExtension.h +MJConst.h MJConst.m +MJFoundation.h MJFoundation.m +MJProperty.h MJProperty.m +MJType.h MJType.m +NSObject+MJCoding.h NSObject+MJCoding.m +NSObject+MJProperty.h NSObject+MJProperty.m +NSObject+MJKeyValue.h NSObject+MJKeyValue.m +``` + +# <a id="Examples"></a> Examples������������ + +### <a id="JSON_Model"></a> The most simple JSON -> Model��������������������������������� + +```objc +typedef enum { + SexMale, + SexFemale +} Sex; + +@interface User : NSObject +@property (copy, nonatomic) NSString *name; +@property (copy, nonatomic) NSString *icon; +@property (assign, nonatomic) unsigned int age; +@property (copy, nonatomic) NSString *height; +@property (strong, nonatomic) NSNumber *money; +@property (assign, nonatomic) Sex sex; +@property (assign, nonatomic, getter=isGay) BOOL gay; +@end + +/***********************************************/ + +NSDictionary *dict = @{ + @"name" : @"Jack", + @"icon" : @"lufy.png", + @"age" : @20, + @"height" : @"1.55", + @"money" : @100.9, + @"sex" : @(SexFemale), + @"gay" : @"true" +// @"gay" : @"1" +// @"gay" : @"NO" +}; + +// JSON -> User +User *user = [User mj_objectWithKeyValues:dict]; + +NSLog(@"name=%@, icon=%@, age=%zd, height=%@, money=%@, sex=%d, gay=%d", user.name, user.icon, user.age, user.height, user.money, user.sex, user.gay); +// name=Jack, icon=lufy.png, age=20, height=1.550000, money=100.9, sex=1 +``` + +### <a id="JSONString_Model"></a> JSONString -> Model���JSON��������������������� + +```objc +// 1.Define a JSONString +NSString *jsonString = @"{\"name\":\"Jack\", \"icon\":\"lufy.png\", \"age\":20}"; + +// 2.JSONString -> User +User *user = [User mj_objectWithKeyValues:jsonString]; + +// 3.Print user's properties +NSLog(@"name=%@, icon=%@, age=%d", user.name, user.icon, user.age); +// name=Jack, icon=lufy.png, age=20 +``` + +### <a id="Model_contains_model"></a> Model contains model��������������������������� + +```objc +@interface Status : NSObject +@property (copy, nonatomic) NSString *text; +@property (strong, nonatomic) User *user; +@property (strong, nonatomic) Status *retweetedStatus; +@end + +/***********************************************/ + +NSDictionary *dict = @{ + @"text" : @"Agree!Nice weather!", + @"user" : @{ + @"name" : @"Jack", + @"icon" : @"lufy.png" + }, + @"retweetedStatus" : @{ + @"text" : @"Nice weather!", + @"user" : @{ + @"name" : @"Rose", + @"icon" : @"nami.png" + } + } +}; + +// JSON -> Status +Status *status = [Status mj_objectWithKeyValues:dict]; + +NSString *text = status.text; +NSString *name = status.user.name; +NSString *icon = status.user.icon; +NSLog(@"text=%@, name=%@, icon=%@", text, name, icon); +// text=Agree!Nice weather!, name=Jack, icon=lufy.png + +NSString *text2 = status.retweetedStatus.text; +NSString *name2 = status.retweetedStatus.user.name; +NSString *icon2 = status.retweetedStatus.user.icon; +NSLog(@"text2=%@, name2=%@, icon2=%@", text2, name2, icon2); +// text2=Nice weather!, name2=Rose, icon2=nami.png +``` + +### <a id="Model_contains_model_array"></a> Model contains model-array������������������������������������������������������������������������ + +```objc +@interface Ad : NSObject +@property (copy, nonatomic) NSString *image; +@property (copy, nonatomic) NSString *url; +@end + +@interface StatusResult : NSObject +/** Contatins status model */ +@property (strong, nonatomic) NSMutableArray *statuses; +/** Contatins ad model */ +@property (strong, nonatomic) NSArray *ads; +@property (strong, nonatomic) NSNumber *totalNumber; +@end + +/***********************************************/ + +// Tell MJExtension what type of model will be contained in statuses and ads. +[StatusResult mj_setupObjectClassInArray:^NSDictionary *{ + return @{ + @"statuses" : @"Status", + // @"statuses" : [Status class], + @"ads" : @"Ad" + // @"ads" : [Ad class] + }; +}]; +// Equals: StatusResult.m implements +mj_objectClassInArray method. + +NSDictionary *dict = @{ + @"statuses" : @[ + @{ + @"text" : @"Nice weather!", + @"user" : @{ + @"name" : @"Rose", + @"icon" : @"nami.png" + } + }, + @{ + @"text" : @"Go camping tomorrow!", + @"user" : @{ + @"name" : @"Jack", + @"icon" : @"lufy.png" + } + } + ], + @"ads" : @[ + @{ + @"image" : @"ad01.png", + @"url" : @"http://www.ad01.com" + }, + @{ + @"image" : @"ad02.png", + @"url" : @"http://www.ad02.com" + } + ], + @"totalNumber" : @"2014" +}; + +// JSON -> StatusResult +StatusResult *result = [StatusResult mj_objectWithKeyValues:dict]; + +NSLog(@"totalNumber=%@", result.totalNumber); +// totalNumber=2014 + +// Printing +for (Status *status in result.statuses) { + NSString *text = status.text; + NSString *name = status.user.name; + NSString *icon = status.user.icon; + NSLog(@"text=%@, name=%@, icon=%@", text, name, icon); +} +// text=Nice weather!, name=Rose, icon=nami.png +// text=Go camping tomorrow!, name=Jack, icon=lufy.png + +// Printing +for (Ad *ad in result.ads) { + NSLog(@"image=%@, url=%@", ad.image, ad.url); +} +// image=ad01.png, url=http://www.ad01.com +// image=ad02.png, url=http://www.ad02.com +``` + +### <a id="Model_name_JSON_key_mapping"></a> Model name - JSON key mapping���������������������������������������key���������(������������������������)��� + +```objc +@interface Bag : NSObject +@property (copy, nonatomic) NSString *name; +@property (assign, nonatomic) double price; +@end + +@interface Student : NSObject +@property (copy, nonatomic) NSString *ID; +@property (copy, nonatomic) NSString *desc; +@property (copy, nonatomic) NSString *nowName; +@property (copy, nonatomic) NSString *oldName; +@property (copy, nonatomic) NSString *nameChangedTime; +@property (strong, nonatomic) Bag *bag; +@end + +/***********************************************/ + +// How to map +[Student mj_setupReplacedKeyFromPropertyName:^NSDictionary *{ + return @{ + @"ID" : @"id", + @"desc" : @"description", + @"oldName" : @"name.oldName", + @"nowName" : @"name.newName", + @"nameChangedTime" : @"name.info[1].nameChangedTime", + @"bag" : @"other.bag" + }; +}]; +// Equals: Student.m implements +mj_replacedKeyFromPropertyName method. + +NSDictionary *dict = @{ + @"id" : @"20", + @"description" : @"kids", + @"name" : @{ + @"newName" : @"lufy", + @"oldName" : @"kitty", + @"info" : @[ + @"test-data", + @{ + @"nameChangedTime" : @"2013-08" + } + ] + }, + @"other" : @{ + @"bag" : @{ + @"name" : @"a red bag", + @"price" : @100.7 + } + } +}; + +// JSON -> Student +Student *stu = [Student mj_objectWithKeyValues:dict]; + +// Printing +NSLog(@"ID=%@, desc=%@, oldName=%@, nowName=%@, nameChangedTime=%@", + stu.ID, stu.desc, stu.oldName, stu.nowName, stu.nameChangedTime); +// ID=20, desc=kids, oldName=kitty, nowName=lufy, nameChangedTime=2013-08 +NSLog(@"bagName=%@, bagPrice=%f", stu.bag.name, stu.bag.price); +// bagName=a red bag, bagPrice=100.700000 +``` + + +### <a id="JSON_array_model_array"></a> JSON array -> model array��������������������������������������������� + +```objc +NSArray *dictArray = @[ + @{ + @"name" : @"Jack", + @"icon" : @"lufy.png" + }, + @{ + @"name" : @"Rose", + @"icon" : @"nami.png" + } + ]; + +// JSON array -> User array +NSArray *userArray = [User mj_objectArrayWithKeyValuesArray:dictArray]; + +// Printing +for (User *user in userArray) { + NSLog(@"name=%@, icon=%@", user.name, user.icon); +} +// name=Jack, icon=lufy.png +// name=Rose, icon=nami.png +``` + +### <a id="Model_JSON"></a> Model -> JSON��������������������������������� +```objc +// New model +User *user = [[User alloc] init]; +user.name = @"Jack"; +user.icon = @"lufy.png"; + +Status *status = [[Status alloc] init]; +status.user = user; +status.text = @"Nice mood!"; + +// Status -> JSON +NSDictionary *statusDict = status.mj_keyValues; +NSLog(@"%@", statusDict); +/* + { + text = "Nice mood!"; + user = { + icon = "lufy.png"; + name = Jack; + }; + } + */ + +// More complex situation +Student *stu = [[Student alloc] init]; +stu.ID = @"123"; +stu.oldName = @"rose"; +stu.nowName = @"jack"; +stu.desc = @"handsome"; +stu.nameChangedTime = @"2018-09-08"; + +Bag *bag = [[Bag alloc] init]; +bag.name = @"a red bag"; +bag.price = 205; +stu.bag = bag; + +NSDictionary *stuDict = stu.mj_keyValues; +NSLog(@"%@", stuDict); +/* +{ + ID = 123; + bag = { + name = "\U5c0f\U4e66\U5305"; + price = 205; + }; + desc = handsome; + nameChangedTime = "2018-09-08"; + nowName = jack; + oldName = rose; +} + */ +``` + +### <a id="Model_array_JSON_array"></a> Model array -> JSON array��������������������������������������������� + +```objc +// New model array +User *user1 = [[User alloc] init]; +user1.name = @"Jack"; +user1.icon = @"lufy.png"; + +User *user2 = [[User alloc] init]; +user2.name = @"Rose"; +user2.icon = @"nami.png"; + +NSArray *userArray = @[user1, user2]; + +// Model array -> JSON array +NSArray *dictArray = [User mj_keyValuesArrayWithObjectArray:userArray]; +NSLog(@"%@", dictArray); +/* + ( + { + icon = "lufy.png"; + name = Jack; + }, + { + icon = "nami.png"; + name = Rose; + } + ) + */ +``` + +### <a id="Core_Data"></a> Core Data + +```objc +NSDictionary *dict = @{ + @"name" : @"Jack", + @"icon" : @"lufy.png", + @"age" : @20, + @"height" : @1.55, + @"money" : @"100.9", + @"sex" : @(SexFemale), + @"gay" : @"true" + }; + +// This demo just provide simple steps +NSManagedObjectContext *context = nil; +User *user = [User mj_objectWithKeyValues:dict context:context]; + +[context save:nil]; +``` + +### <a id="Coding"></a> Coding + +```objc +#import "MJExtension.h" + +@implementation Bag +// NSCoding Implementation +MJExtensionCodingImplementation +@end + +/***********************************************/ + +// what properties not to be coded +[Bag mj_setupIgnoredCodingPropertyNames:^NSArray *{ + return @[@"name"]; +}]; +// Equals: Bag.m implements +mj_ignoredCodingPropertyNames method. + +// Create model +Bag *bag = [[Bag alloc] init]; +bag.name = @"Red bag"; +bag.price = 200.8; + +NSString *file = [NSHomeDirectory() stringByAppendingPathComponent:@"Desktop/bag.data"]; +// Encoding +[NSKeyedArchiver archiveRootObject:bag toFile:file]; + +// Decoding +Bag *decodedBag = [NSKeyedUnarchiver unarchiveObjectWithFile:file]; +NSLog(@"name=%@, price=%f", decodedBag.name, decodedBag.price); +// name=(null), price=200.800000 +``` + +### <a id="Camel_underline"></a> Camel -> underline��������������������������������������������������������� +```objc +// Dog +#import "MJExtension.h" + +@implementation Dog ++ (NSString *)mj_replacedKeyFromPropertyName121:(NSString *)propertyName +{ + // nickName -> nick_name + return [propertyName mj_underlineFromCamel]; +} +@end + +// NSDictionary +NSDictionary *dict = @{ + @"nick_name" : @"������", + @"sale_price" : @"10.5", + @"run_speed" : @"100.9" + }; +// NSDictionary -> Dog +Dog *dog = [Dog mj_objectWithKeyValues:dict]; + +// printing +NSLog(@"nickName=%@, scalePrice=%f runSpeed=%f", dog.nickName, dog.salePrice, dog.runSpeed); +``` + +### <a id="NSString_NSDate"></a> NSString -> NSDate, nil -> @""������������������������������������������������������NSDate������������nil���������@""������ +```objc +// Book +#import "MJExtension.h" + +@implementation Book +- (id)mj_newValueFromOldValue:(id)oldValue property:(MJProperty *)property +{ + if ([property.name isEqualToString:@"publisher"]) { + if (oldValue == nil) return @""; + } else if (property.type.typeClass == [NSDate class]) { + NSDateFormatter *fmt = [[NSDateFormatter alloc] init]; + fmt.dateFormat = @"yyyy-MM-dd"; + return [fmt dateFromString:oldValue]; + } + + return oldValue; +} +@end + +// NSDictionary +NSDictionary *dict = @{ + @"name" : @"5������������iOS������", + @"publishedTime" : @"2011-09-10" + }; +// NSDictionary -> Book +Book *book = [Book mj_objectWithKeyValues:dict]; + +// printing +NSLog(@"name=%@, publisher=%@, publishedTime=%@", book.name, book.publisher, book.publishedTime); +``` + +### <a id="More_use_cases"></a> More use cases������������������ +- Please reference to `NSObject+MJKeyValue.h` and `NSObject+MJCoding.h` + + +## ������ +* ������������������������������BUG���������������Issues������������������������������������������������������������BUG��������������� +* ������������������������������������������������������������Issues��������������������������������������������������������������������� +* ���������������MJExtension������������������������Pull Requests��� -- Gitblit v1.8.0