我有一个自定义对象,其属性为'previous'。
如果我想访问此属性,我可以使用
object.age
如果我现在拥有一个具有属性'age'的自定义对象数组,我希望能够访问这样的年龄(数组中的第五个对象)
myArray[4].age
但它仅适用于括号语法
[myArray[4] age]
数组中是否没有可用的点语法,或者我想念的是什么?
提前致谢
答案 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]