我有一个类如下,我使用NSMutableArray来存储MyClass对象的列表。
@interface MyClass: NSObject{
NSString* _name;
}
@property(nonatomic)NSString* name;
NSMutableArray* array = [NSMutableArray arrayWithCapacity:2];
[array addObject:[[MyClass alloc]init]];
[array addObject:[[MyClass alloc]init]];
我必须进行强制转换才能从数组中获取名称。
((MyClass*)array[0]).name
是否有更简洁的方法可以从name
引用MyClass
?
答案 0 :(得分:3)
我不知道为什么@matt在他的回答中没有显示轻量级泛型的语法,但这里是:
NSMutableArray<MyClass *>* array = [NSMutableArray arrayWithCapacity:2];
现在,array[0]
的类型为MyClass *
,而不仅仅是id
,因此可行:
array[0].name
答案 1 :(得分:2)
是。如果 另外,请注意,即使没有泛型,也可以分配而不用投射(因为可以将 或者,正如@rmaddy指出的那样,完全放弃dot-syntax并直接调用getter;这是有效的,因为任何消息都可以发送到 或者,使用KVC将 Objective-C 仍然不知道array
只包含的 MyClass对象,则可以使用轻量级泛型为编译器提供有关其包含内容的提示,从而无需进行强制转换。< / p>
id
分配到任何对象引用中):MyClass* c = array[0];
NSString* name = c.name;
id
:NSString* name = [array[0] name];
name
属性作为数组获取:NSArray* names = [array valueForKey:@"name"];
names
包含什么(除非你使用轻量级泛型),但现在你可以说,例如。NSString* name = names[0];