IOS中將字典轉成模型對象


作為IOS開發初級者今天學習了 如何將plist數據字典轉成 數據對象數組中 。有點像C#中解析xml數據 的過程。

apps.plist的xml數據是這樣的

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
    <dict>
        <key>name</key>
        <string>天天酷跑</string>
        <key>icon</key>
        <string>icon_00</string>
    </dict>
          <dict>
        <key>name</key>
        <string>保衛蘿卜2</string>
        <key>icon</key>
        <string>icon_10</string>
    </dict>
    <dict>
        <key>name</key>
        <string>神偷奶爸</string>
        <key>icon</key>
        <string>icon_11</string>
    </dict>
</array>
</plist>


從處理plist中的數據 並返回模型對象的數組
/**
 *  從處理plist中的數據 並返回模型對象的數組
 *
 *  @return  NSArray *apps;

 */
-(NSArray *) apps{
    if (_apps==nil) {
        // 過去plist的全路徑
        NSString *path=[[NSBundle mainBundle]pathForResource:@"app.plist" ofType:nil];
        //加載數組
        NSArray *dicArray=[NSArray arrayWithContentsOfFile:path];
        //將dicArray里面的所有字典轉成模型對象,放到新的數組中。
        NSMutableArray *appArray=[NSMutableArray  array];
        for (NSDictionary *dict in dicArray) {
            //創建模型對象
            
            
            
            /*
            MyApp *app=[[MyApp alloc] initWithDict:dict];
             
            [NSString stringWithFormat:<#(NSString *), ...#>];
            [[NSString alloc] initWithFormat:<#(NSString *), ...#>];
            
            [NSArray arrayWithContentsOfFile:<#(NSString *)#>]
            [[NSArray alloc] initWithContentsOfFile:<#(NSString *)#>;
             通過這里 我們需要提取一個appWith   
             一個命名規范的問題
             */
            
            MyApp *app=[MyApp appWithDict:dict];
            //添加到對象到數組中
            [appArray addObject:app];
        }
        //賦值
        _apps=dicArray;
        
    }
    return _apps;
}

 

 

自定義的MyApp類,和字典中做到一一對應 

#import <Foundation/Foundation.h>
/**
 *  copy :NSString
    strong :一般對象
    weak:UI控件
    assign :基本數據類型
 */
@interface MyApp : NSObject
/**
 *  圖標
 */
@property (nonatomic,copy) NSString *icon;
/**
 *  名稱
 */
@property(nonatomic,copy) NSString *name;
/**
 *  通過字典來初始化模型對象
 *
 *  @param dic  字典對象
 *
 *  @return 已經初始化完畢的模型對象
 */
/*
instancetype的作用,就是使那些非關聯返回類型的方法返回所在類的類型!
好處能夠確定對象的類型,能夠幫助編譯器更好的為我們定位代碼書寫問題
instanchetype和id的對比
1、相同點
都可以作為方法的返回類型

2、不同點
①instancetype可以返回和方法所在類相同類型的對象,id只能返回未知類型的對象;

②instancetype只能作為返回值,不能像id那樣作為參數,比如下面的寫法:
*/
-(instancetype)initWithDict:(NSDictionary *)dict;

+(instancetype) appWithDict:(NSDictionary *)dict;
@end

 

 

@implementation MyApp
-(instancetype)initWithDict:(NSDictionary *)dict{
    if (self=[super init]) {
        self.name=dict[@"name"];
        self.icon=dict[@"icon"];
    }
    return self;
}
+(instancetype) appWithDict:(NSDictionary *)dict{
    
    // 為何使用self,誰調用self方法 self就會指向誰!!
    return [[self alloc] initWithDict:dict];
    
}

@end

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM