Tôi đã viết macro trong Objective-C để thực hiện một dàn diễn viên an toàn. Dưới đây là những gì nó trông giống như vậy cho đến nay:Macro đúc an toàn mục tiêu-C
#define SAFE_CAST(OBJECT, TYPE) ([OBJECT isKindOfClass:[TYPE class]] ? (TYPE *) OBJECT: nil)
Điều này hoạt động thực sự tốt, nhưng nó sẽ là tốt đẹp nếu có một cách để lưu trữ OBJECT trong một biến để nó không được gọi hai lần. Ví dụ, bằng cách sử dụng vĩ mô như vậy:
NSString *str = SAFE_CAST([dictinary objectForKey:key], NSString);
kết quả trong mã tương tự như sau khi vĩ mô được mở rộng:
NSString *str = ([[dictinary objectForKey:key] isKindOfClass:[NSString class]] ? (NSString *) [dictinary objectForKey:key]: nil);
Tôi muốn cho nó đi làm thêm như thế này:
id obj = [dictionary objectForKey:key];
NSString *str = ([obj objectForKey:key] isKindOfClass[NSString class]] ? (NSString *) obj : nil);
Cảm ơn.
Tôi không thấy gì điểm của việc này là. Bạn đã nói rằng bạn muốn sử dụng nó để khử trùng plists, nhưng chắc chắn nếu bạn sử dụng này, bạn phải kiểm tra nếu đối tượng trả về là nil? Tại sao không chỉ kiểm tra nếu đối tượng làKindOfClass: expectedClass? – JeremyP