嘿,我是目标c的新手,一旦它在NSMutable数组中,有没有办法获取和对象属性。
像这样:
所以在c++中,它看起来像这个
for (int i = 0; i < length; i++)
{
someArray[i].someClass.somePropertyInTheClass;
}
在OBJECTIVE-C 中使用NSMutableArray有任何可能的方法吗
提前感谢所有支持目标的c-ers!
在Objective-C中有两种主要的方法来循环数组。首先,使用一个索引:
NSInteger count = [array count];
for (int i; i < count; i++)
{
id object = [array objectAtIndex:i];
NSLog(@"%@", [object somePropertyInTheClass]);
}
请注意,计数存储在一个变量中,而不是for循环中。这避免了每次通过循环都必须重新计算计数。
一种更简洁的方法是使用快速枚举:
for (id object in array)
{
NSLog(@"%@", [object somePropertyInTheClass]);
}
两个版本在语义上都是等价的,它们都记录数组中每个对象的somePropertyInTheClass
属性(假设每个对象都有一个somePropertyInTheClass
属性)。在这两个版本中,id
可以也应该替换为特定的类,例如基于您在数组中存储的内容的NSDictionary *
。
虽然快速枚举更简洁,但如果您需要将索引用于除访问一个数组之外的其他内容,则使用计数器的方法非常有用。此外,快速枚举不允许在循环时修改数组,即使在另一个方法中也是如此。不过,在大多数情况下,当遍历数组时,可以使用快速枚举。
嘿,我是目标c的新手,有什么方法可以抓住和物体吗属性。
仅仅包含在数组或其他容器中并不能阻止您访问对象的属性。如果你想要的对象在索引i,你可以简单地得到这个对象:
Person *person = [arrayOfPeople objectAtIndex:i];
或者更简单:
Person *person = arrayOfPeople[i];
然后你当然可以得到这样的属性:
NSString *name = [person valueForKey:@"name"];
或者只是:
NSString *name = person.name;
但是,您的示例显示了一个循环,表明您可能希望获得数组中所有对象的相同属性。Objective-C容器有一个非常好的特性,即它们通过从每个包含的对象中获取给定键的值并返回一个只包含这些值的容器来响应-valueForKey:
。所以,你可以说:
NSArray *names = [arrayOfPeople valueForKey:@"name"];
在names
中得到一个名称数组,数组arrayOfPeople
中的每个对象都有一个名称。
当然,您也可以对数组进行迭代:
for (Person *person in arrayOfPeople) {
NSString *name = person.name;
NSLog(@"The name is %@", name);
}
最后,您应该知道,在访问对象时,可变数组的工作方式与非可变数组的相同。可变数组和非可变数组之间的唯一区别是,您可以在创建可变数组后添加对象或从中删除对象。数组中包含的对象的可变性不受数组自身可变性的影响。也就是说,如果您有一个数组arrayOfPeople
,并且其中存储的Person
对象可以修改,那么无论arrayOfPeople
是可变的还是不可变的,您都可以自由更改数组中存储的任何对象的名称、年龄等。