我有一个具有“以前”属性的自定义对象。
如果我想访问这个属性,我可以使用
object.age
如果我现在有一组具有“年龄”属性的自定义对象,我希望能够像这样访问年龄(数组中的第五个对象)
myArray[4].age
但它仅适用于括号语法
[myArray[4] age]
数组中是否没有可用的点语法,或者我错过了什么?
提前致谢
我有一个具有“以前”属性的自定义对象。
如果我想访问这个属性,我可以使用
object.age
如果我现在有一组具有“年龄”属性的自定义对象,我希望能够像这样访问年龄(数组中的第五个对象)
myArray[4].age
但它仅适用于括号语法
[myArray[4] age]
数组中是否没有可用的点语法,或者我错过了什么?
提前致谢
只有当编译器知道对象是什么类时,才能使用点语法:
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];
每个对象都有一个自定义类。每条消息都是潜在的崩溃。调试的噩梦。
我的建议:不要去那里利用编译器的强类型支持。
最好多写几行代码,并确保不要在不可预测和未经验证的对象上触发随机消息。
Objective-C 没有强类型集合,因为它是一种动态类型语言。因此,编译器无法知道存储在集合(本例中为数组)中的对象的类型,这就是您不能使用点语法的原因。编译器给你的错误是Property 'age' is not found on object of type 'id'
,它告诉你从集合返回的对象是类型的id
。
如果你想使用点表示法,你必须包括一个演员:
NSUInteger age = ((MyClass *) myArray[4]).age;
除了有点难看之外,我只会在您 100% 确定您知道数组将只包含 type 的对象时才这样做MyClass
。
[[myArray objectAtIndex:4]age]