手を取ってMJExtensionの使い方を教えてあげる

5231 ワード

まずMJExtensionのインストールですが、cocoapodsをお勧めします.cocoapodsがまだインストールされていない場合は、ここに移動してくださいhttps://www.jianshu.com/p/b4efe9fbc6e4インストール後、(ここでは、どのようにcocoapodsでサードパーティライブラリをインストールするかは、言うまでもない)、githubの著者はすでによく書いていますが、ここでは、最も簡単な記録から、Personのmodel(NSObjectを継承する)を定義します.hファイル定義属性
#import 
#import 

@interface Person : NSObject
@property (nonatomic, strong) NSString *name;
@property(nonatomic, assign) NSInteger age;
@end


辞書(json文字列は同じ)でmodelを生成する
NSDictionary *dic = @{@"name":@"revon", @"age":@"19"};
Person *p1 = [Person mj_objectWithKeyValues:dic];

ネットワークがiOSのキーワードを返す値、または、返されるキーを使いたくない場合は、マッピング関係を変更する必要があります.もし、返されるキーがnameであれば、personの中で、私はpersonNameを使いたいと思っています.そうすることができます.
#import 
#import 

@interface Person : NSObject
@property (nonatomic, strong) NSString *personName;
@property(nonatomic, assign) NSInteger age;
@end


パーソンのm内、マッピング関係を変更
+ (NSDictionary *)mj_replacedKeyFromPropertyName{
    return @{
             @"personName" : @"persno"//        key,       key
             };
}

次の使い方は、前と同じです.もし、戻ってきたデータをさらに加工したいなら、例えば、タイムスタンプを返したいのですが、モデルを生成するときに、あなたが望んでいるフォーマットに変換したいなら、Personが例を挙げます.
#import 
#import 

@interface Person : NSObject

@property (nonatomic, copy) NSString *name;
@property(nonatomic, assign) NSInteger age;
@property (nonatomic, strong) NSString *birthday;

@end

Personのmファイル内
- (id)mj_newValueFromOldValue:(id)oldValue property:(MJProperty *)property{
    if ([property.name isEqualToString:@"birthday"]) {
        if (oldValue) {
            //      
            NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
            formatter.timeZone = [NSTimeZone timeZoneWithName:@"shanghai"];
            [formatter setDateStyle:NSDateFormatterMediumStyle];
            [formatter setTimeStyle:NSDateFormatterShortStyle];
            [formatter setDateFormat:@"yyyy MM dd  HH:mm"];
            NSDate* date = [NSDate dateWithTimeIntervalSince1970:[oldValue doubleValue]];
            NSString* dateString = [formatter stringFromDate:date];
            return dateString;
            }
        }
        else {
            return @"    ";
        }
    return oldValue;
}

便利ではないでしょうか.ははは、注意して、この方法、またいくつかの判断をすることができて、例えば、返す値はnilで、どのように処理して、返す値は予想していないで、どのように処理して、すべて判断することができます!!
以上のモデルを変換する方法はすべてこれです
mj_objectWithKeyValues:

---------分割線--------では、モデルの中にモデルがある場合にStudentのモデルを新規作成します
#import 

@interface Student : NSObject

@property (nonatomic, copy) NSString *name;
@property(nonatomic, assign) NSInteger age;

@end


Personでは、Studentのプロパティを追加します.
@interface Person : NSObject

@property (nonatomic, copy) NSString *name;
@property(nonatomic, assign) NSInteger age;
@property (nonatomic, strong) NSString *birthday;
@property (nonatomic, strong) Student *stu;

@end

Personのmではどのような処理を行う必要はありません.例:
    NSDictionary *dic = @{
                          @"add" : @"     ",
                          @"stu" : @{
                                  @"name" : @"revon",
                                  @"age" : @"10"
                                  }
                          };
    Person *p = [Person mj_objectWithKeyValues:dic];
    NSLog(@"----- %@", p.stu.name);

ここで,デフォルトリクエストが返すkeyはstuであり,stuでなければマッピング関係を変更する必要があり,上のように参照できる.
次の場合、Personには配列があり、配列の中にはStudioオブジェクトが入っています.
#import 
#import 
#import "Student.h"

@interface Person : NSObject

@property (nonatomic, copy) NSString *name;
@property(nonatomic, assign) NSInteger age;
@property (nonatomic, strong) NSString *birthday;
@property (nonatomic, strong) Student *stu;
@property (nonatomic, strong) NSArray *stuarray;

@end

Personのm奥
+ (NSDictionary *)mj_objectClassInArray{
    return @{@"stuarray" : @"Student"};//  ,        ,      
}

使用法は次のとおりです.
NSDictionary *dic = @{@"add" : @"     ",
                          @"stuarray" : @[@{@"name" : @"revon1", @"age" : @"18"}, @{@"name" : @"revon2", @"age" : @"140"}]};
    Person *p1 = [Person mj_objectWithKeyValues:dic];
    for (Student *st in p1.stuarray) {
        NSLog(@"--- name is %@", st.name);
    }

マッピング関係を変えて、上と同じです!!
もう一つの使いやすい方法は、要求が戻ってきたのが配列であれば、モデルの配列に変換したいと思っています.もちろん、for inサイクルで配列の中の各要素を遍歴してからモデルに変換し、変換されたモデルを1つの配列で保存することができます.ここでは、簡単な方法があります.
resultArray = [Model mj_objectArrayWithKeyValuesArray:array];

これはとても便利ではありませんか、はは、よし、楽しい游びに行きましょう!!
ps:model辞書を回して、必要であればgithubの上のチュートリアルを見て、住所:https://github.com/CoderMJLee/MJExtensionまるでso easy!!