教你使用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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...