在Objective-C中访问对象数组中的对象及其属性

在Objective-C中访问对象数组中的对象及其属性,objective-c,arrays,object,Objective C,Arrays,Object,我是Objective-C中的新编码,我正在尝试找出如何执行以下操作: 我有一个班级公司: @interface Company : NSObject @property (strong, nonatomic)NSString *companyID; @property (strong, nonatomic)NSString *companyName; @end 我正在从服务器上获取一个字典,并在对象中进行解析。 之后,我将这些对象添加到一个数组中(它正在工作-这里没有问题-我得到了JS

我是Objective-C中的新编码,我正在尝试找出如何执行以下操作:

我有一个班级
公司

@interface Company : NSObject

@property (strong, nonatomic)NSString *companyID;

@property (strong, nonatomic)NSString *companyName;

@end
我正在从服务器上获取一个字典,并在对象中进行解析。 之后,我将这些对象添加到一个数组中(它正在工作-这里没有问题-我得到了JSON)

我只是想做一些类似的事情(这两种方法当然行不通):

或:

你能帮帮我吗

谢谢

在我的头顶上(不是为了测试而运行它)


Objective-C现在支持轻量级泛型。例如,您可以指定数组为
公司
对象的数组,而不是简单的
NSMutableArray

NSMutableArray <Company *> *companyInformationArray;

这样做的好处是,如果您试图添加非
公司的内容,编译器会警告您,同样,您也喜欢在不进行任何强制转换的情况下强键入属性。

谢谢您的帮助。我会记在心里的。很好的补充;当Xcode自动完成枚举块时,这尤其有用,例如,代替
[companyInformationaray enumerateObjectsUsingBlock:^(id_Nonnull obj,NSUInteger idx,BOOL*_nonnullstop){},您将获得
[companyInformationaray enumerateObjectsUsingBlock:^(Company*\u Nonnull obj,NSUInteger idx,BOOL*\u Nonnull stop){}这是一个比在特定索引处强制转换元素更好的选择。为什么要放弃编译器支持呢?一个非常小的、不相关的观察:对于
公司
等类的
NSString
属性,使用
copy
而不是
strong
通常是谨慎的。通过使用
strong
,如果字符串恰好是
NSMutableString
,并且后来发生了变异,那么您的
公司
对象也有可能发生意外变异。通过使其
复制
,可以避免这种情况(当然是边缘情况)。
companyInformationArray
Company *company = [Company new];
company = [[companyInformationArray objectAtIndex:0] valueForKey:@"name"];
Company *company = [Company new];
company.companyName = [[companyInformationArray objectAtIndex:0] companyName];
// get the Company object at slot [0] in the array of Company objects
Company *company = (Company *)[companyInformationArray objectAtIndex:0];

// now use the properties...
myNameLabel.text = company.companyName;
myIDLabel.text = company.companyID;
NSMutableArray <Company *> *companyInformationArray;
NSString *nameOfSecondCompany = companyInformationArray[1].companyName;