0

我有一个具有“以前”属性的自定义对象。

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

object.age

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

myArray[4].age

但它仅适用于括号语法

[myArray[4] age]

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

提前致谢

4

3 回答 3

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];

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

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

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

于 2013-08-09T10:25:02.317 回答
1

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

如果你想使用点表示法,你必须包括一个演员:

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

除了有点难看之外,我只会在您 100% 确定您知道数组将只包含 type 的对象时才这样做MyClass

于 2013-08-09T10:53:06.450 回答
-4

[[myArray objectAtIndex:4]age]

于 2013-08-09T10:14:31.667 回答