我在Objective-C中編寫了一個宏來執行安全的投射。這裏是什麼樣子至今:Objective-C安全鑄造宏
#define SAFE_CAST(OBJECT, TYPE) ([OBJECT isKindOfClass:[TYPE class]] ? (TYPE *) OBJECT: nil)
這個作品真的很好,但它會是很好,如果有存儲對象的變量,因此沒有被調用兩次的方式。例如,使用宏這樣:
NSString *str = SAFE_CAST([dictinary objectForKey:key], NSString);
結果類似下面的代碼,當宏展開:
NSString *str = ([[dictinary objectForKey:key] isKindOfClass:[NSString class]] ? (NSString *) [dictinary objectForKey:key]: nil);
我寧願爲它更像是這方面的工作:
id obj = [dictionary objectForKey:key];
NSString *str = ([obj objectForKey:key] isKindOfClass[NSString class]] ? (NSString *) obj : nil);
謝謝。
我沒有看到這點是什麼。你曾經說過你想用它來清理plists,但是如果你使用這個,你必須測試返回的對象是否爲零?爲什麼不測試對象是否爲KindOfClass:expectedClass? – JeremyP 2010-07-13 08:05:05