教你使用runtime寫一個簡單的字典轉模型的工具類

来源:http://www.cnblogs.com/wm-0818/archive/2016/04/15/5394567.html
-Advertisement-
Play Games

一.自動生成屬性的分類 模型屬性,通常需要跟字典中的key一一對應。從伺服器得到的數據太雜?數據太多?寫成plist文件後一個個對照填寫屬性,太繁瑣?那麼我麽可以嘗試寫一個分類來自動列印出所有屬性。 • 需求:能不能根據一個字典,自動生成對應的屬性。 • 解決:提供一個分類,專門根據字典生成對應的屬 ...


一.自動生成屬性的分類

模型屬性,通常需要跟字典中的key一一對應。從伺服器得到的數據太雜?數據太多?寫成plist文件後一個個對照填寫屬性,太繁瑣?那麼我麽可以嘗試寫一個分類來自動列印出所有屬性。
    •    需求:能不能根據一個字典,自動生成對應的屬性。
    •    解決:提供一個分類,專門根據字典生成對應的屬性字元串。

 1 #import <Foundation/Foundation.h>
 2 
 3 @interface NSDictionary (PropertyCode)
 4 
 5 // 生成屬性代碼
 6 - (void)createPropetyCode;
 7 @end
 8 
 9 @implementation NSDictionary (PropertyCode)
10 // 私有API:真實存在,但是蘋果沒有暴露出來,不給你用
11 // isKindOfClass:判斷下是否是當前類或者子類
12 // 自動生成屬性代碼
13 - (void)createPropetyCode
14 {
15     NSMutableString *codes = [NSMutableString string];
16     // 遍歷字典
17     [self enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull value, BOOL * _Nonnull stop) {
18         NSString *code = nil;
19         
20         if ([value isKindOfClass:[NSString class]]) {// 註:NSString *筆者喜歡用strong,若想使用copy可修改字元串
21           code = [NSString stringWithFormat:@"@property (nonatomic, strong) NSString *%@;",key];
22         } else if ([value isKindOfClass:NSClassFromString(@"__NSCFBoolean")]){
23             code = [NSString stringWithFormat:@"@property (nonatomic, assign) BOOL %@;",key];
24         } else if ([value isKindOfClass:[NSNumber class]]) {
25              code = [NSString stringWithFormat:@"@property (nonatomic, assign) NSInteger %@;",key];
26         } else if ([value isKindOfClass:[NSArray class]]) {
27             code = [NSString stringWithFormat:@"@property (nonatomic, strong) NSArray *%@;",key];
28         } else if ([value isKindOfClass:[NSDictionary class]]) {
29             code = [NSString stringWithFormat:@"@property (nonatomic, strong) NSDictionary *%@;",key];
30         }
31         
32         // 拼接字元串
33         [codes appendFormat:@"\n%@\n",code];
34 
35     }];
36     
37     NSLog(@"%@",codes);
38 }
39 @end
分類NSDictionary+PropertyCode

外界使用:

 1 #import "ViewController.h"
 2 #import "Status.h"
 3 #import "NSDictionary+PropertyCode.h"
 4 /*
 5     plist:
 6     字典
 7     字典轉模型
 8  */
 9 
10 @interface ViewController ()
11 
12 @end
13 
14 @implementation ViewController
15 
16 - (void)viewDidLoad {
17     [super viewDidLoad];
18     
19     // 解析Plist
20     // 獲取文件全路徑
21     NSString *fileName = [[NSBundle mainBundle] pathForResource:@"status.plist" ofType:nil];
22     // 獲取字典
23     NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:fileName];
24     
25     // 設計模型-定義屬性
26     // 自動生成屬性代碼
27     [dict createPropetyCode];
28 }
29 @end
ViewController

status.plist

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 直接上代碼。。。。 public class CastView7 extends View{ private Paint linePaint;//坐標系的直線畫筆 private Paint zhexianPaint;//折現畫筆 private Paint dianPaint;//點的畫筆 pri ...
  • 自從Fragment出現,曾經有段時間,感覺大家談什麼都能跟Fragment談上關係,做什麼都要問下Fragment能實現不~~~哈哈,是不是有點過~~~ 本篇博客力求為大家說明Fragment如何產生,什麼是Fragment,Fragment生命周期,如何靜態和動態的使用Fragment,Frag ...
  • 在android studio 1.5.1正式版中,新建的activity繼承的是AppCompatActivity,但是我們隱藏標題欄用代碼的方式再使用的時候就會引發崩潰,代碼如下: 我們原來使用的方式在在 setContentView(R.layout.activity_navigation)以 ...
  • 之前介紹了核心動畫之彈簧動畫,有關於核心動畫的結構圖大家都還記得吧 所以說動畫組屬於核心動畫,它的初始化和核心動畫初始化的方法一樣。那麼我就簡單的介紹一下動畫組 動畫組:CAAnimationGroup 可以讓動畫同時執行 動畫組中設置的時間控制類屬性會影響到動畫組內部動畫的時間控制類屬性 在動畫組 ...
  • 對於未進行保護的Android應用,有很多方法和思路對其進行逆向分析和攻擊。使用一些基本的方法,就可以打破對應用安全非常重要的機密性和完整性,實現獲取其內部代碼、數據,修改其代碼邏輯和機制等操作。這篇文章主要介紹一些基本的應用逆向和分析方法,演示Android應用的代碼機密性和完整性是如何被破壞,進 ...
  • 前言 在開發中常要處理橫豎屏切換,怎麼處理先看生命周期 申明 Activity 橫豎屏切換時需要回調兩個函數 ,所以在此將這個兩個函數暫時看成是Activity 橫豎屏切換的生命周期的一部分,這兩個函數如下 橫豎屏切換生命周期 1、啟動程式進入Activity界面 2、旋轉屏幕 3、再次旋轉屏幕 4 ...
  • 錯誤描述: App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via you ...
  • 總結一下AFNetworking的基本使用方法。 ①在AppDelegate.h中,導入AFHTTPRequestOperationManager.h文件,添加一個屬性manager: 在實現文件中Application:didFinishLauchingWithOpertions:中完成manag ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...