Objective-C 奇巧淫技--讓對象偽裝成一個字典

來源:互聯網
上載者:User

標籤:ios   設計   介面   

奇技淫巧 指過於奇巧而無益的技藝與製品.
轉載請註明出處 uxyheaven csdn部落格
其實這個技巧特定情況下,要求不高還挺是有用的.

我們原本有個介面1,設計的….,為了靈活性嘛,就用了字典

- (void)method1:(NSDictionary *)dic{    NSString *name = dic[@"name"];    NSLog(@"%s, name: %@",__FUNCTION__, name);}

等到我們水平提高了,發現代碼應該這麼寫

@protocol protocol <NSObject>- (NSString *)name;@end- (void)method2:(id <protocol>)objc{    NSString *name = objc.name;    NSLog(@"%s, name: %@",__FUNCTION__, name);}

那麼問題就來了,method1已經被你不知道用了多少個地方了,怎樣改動成本最小呢?
我們可以將一個對象偽裝成一個字典

// .h@interface NormalEntity : NSObject@property (nonatomic, copy) NSString *name;@endAS_PretendDictionary(NormalEntity)// .m@implementation NormalEntity@endDEF_PretendDictionary(NormalEntity);// core@protocol PretendDictionaryProtocol<NSObject>- (void)setObject:(id)obj forKeyedSubscript:(id <NSCopying>)key;- (id)objectForKeyedSubscript:(id)key;@end#define AS_PretendDictionary(__class) \        @interface __class (PretendDictionary)   \        - (void)setObject:(id)obj forKeyedSubscript:(id <NSCopying>)key;            - (id)objectForKeyedSubscript:(id)key;          @end#define DEF_PretendDictionary(__class) \        @implementation __class (PretendDictionary) \        - (void)setObject:(id)obj forKeyedSubscript:(id <NSCopying>)key         {  [self setValue:obj forKeyPath:(NSString *)key]; }           - (id)objectForKeyedSubscript:(id)key           {  return [self valueForKeyPath:key]; }           @end

用的時候就可以直接當他是個字典了

    NormalEntity *bb = [[NormalEntity alloc] init];    bb[@"name"] = @"aaa";    [self method1:(NSDictionary *)bb];

當然了這個和真的字典還是有區別的,只能get 和set,不然也不會在這個系列裡了.
demo可以在這裡下載

Objective-C 奇巧淫技--讓對象偽裝成一個字典

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.