在Objective-C中访问对象数组中的对象及其属性
我是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
公司
:
@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;