Objective-C:有什么技巧可以避免强制转换NSArray对象吗?

amb*_*ght 4 objective-c foundation

我经常发现自己在NSArray中将对象转换为我的类型,当我想用​​点符号(而不是getter)访问它们的特定属性而不创建额外的变量.

是否有任何很酷的功能或技巧告诉objective-c我要将哪一类对象存储到NSArray中,以便编译器将数组中的对象视为我的类型,而不是id?

Car*_*rum 6

如果你的意思是你做的事情如下:

x = ((MyClass *)[myArray objectAtIndex:2]).property1;
Run Code Online (Sandbox Code Playgroud)

您可以将其拆分为两行以便于阅读:

MyClass *myObject = [myArray objectAtIndex:2]
x = myObject.property1;
Run Code Online (Sandbox Code Playgroud)

如果您确实设置了第一种情况,那么您可以在其上创建一个NSArray具有您的类型访问器的类别:

@implementation NSArray (MyCategory)

- (MyClass *)myClassObjectAtIndex:(NSUInteger)index
{
   return [self objectAtIndex:index];
}

@end
Run Code Online (Sandbox Code Playgroud)

然后你可以像你想的那样使用它:

x = [myArray myClassObjectAtIndex:2].property1;
Run Code Online (Sandbox Code Playgroud)

  • 我几乎后悔因为提到了这一点,所以让我尽可能清楚地说明这一点:***你不要把子类化为NSArray`***. (3认同)
  • 实际上有.`arr [0]`在编译时被翻译成`[arr objectAtIndexedSubscript:0];`所以你在技术上可以在类/子类中覆盖它.这似乎是一个可怕的想法. (2认同)