数组对象中的点语法

时间:2013-08-09 10:11:53

标签: objective-c nsarray

我有一个自定义对象,其属性为'previous'。

如果我想访问此属性,我可以使用

object.age

如果我现在拥有一个具有属性'age'的自定义对象数组,我希望能够访问这样的年龄(数组中的第五个对象)

myArray[4].age

但它仅适用于括号语法

[myArray[4] age]

数组中是否没有可用的点语法,或者我想念的是什么?

提前致谢

3 个答案:

答案 0 :(得分:2)

只有当编译器知道对象是什么类时,才能使用点语法:

id x = array[4]; 
float age = [x age];

SomeClass *x = array[4];
float age = x.age;

请注意,第一个版本风险很大。我不得不在一个看起来像这样的项目中处理遗留代码:

NSString *recommendation = [[[[[[[dataArray 
    objectAtIndex:indexPath.section] mainPerson] friends] 
    objectAtIndex:indexPath.row] recommendations] 
    objectAtIndex:0] title];

每个对象都有一个自定义类。每条消息都是潜在的崩溃。调试的噩梦。

我的建议:不要去那里利用编译器的强类型支持。

更好地写几行代码,并确保不会在不可预测和未验证的对象上触发随机消息。

答案 1 :(得分:1)

Objective-C没有强类型集合,因为它是一种动态类型语言。因此,编译器无法知道存储在集合中的对象类型(在本例中为数组),这就是为什么不能使用点语法。编译器给出的错误是Property 'age' is not found on object of type 'id',它告诉您从集合返回的对象是id类型。

如果你想使用点符号,你必须包括一个演员:

NSUInteger age = ((MyClass *) myArray[4]).age;

除了有点难看之外,如果你100%确定你知道数组只包含MyClass类型的对象,我只会这样做。

答案 2 :(得分:-4)

[[myArray objectAtIndex:4] age]