我想知道是否有更好的方法在NSMutableArray中设置属性值中的每个对象?
//player.h
@interface Player : NSObject
@property BOOL isEliminated;
//test.h
@property NSMutableArray *players;
//test.m
for(Player *p in self.players)
{
p.isEliminated = NO;
}
我对xCode很新,我有一个C#背景。我知道C#& Linq可以提供非循环解决方案..我想知道这是否也可以使用Objective C
我在这里和那里搜索......我所能找到的是一种从数组中获取对象的方法,其中属性X等于某个值。
答案 0 :(得分:6)
使用键值编码:
[self.players setValue:@NO forKey:@"isEliminated];
在数组的每个元素上设置属性。
请注意,即使属性是(标量)BOOL
,您也必须使用Objective-C
数字对象@NO
在这里。设置时,它会自动“翻译”为NO
属性。
答案 1 :(得分:0)
好吧,你可以使用块和NSArray
s - (void)enumerateObjectsUsingBlock:(void (^)(id obj, NSUInteger idx, BOOL *stop))block
消息创建一个无环路解决方案。类似的东西:
[self.players enumerateObjectsUsingBlock:^(Player *p, NSUInteger idx, BOOL *stop) {
p.isEliminated = NO;
}];
然而,这几乎不可读。在我看来,使用循环进行此类工作很好。
答案 2 :(得分:0)
您可以在NSMutableArray上使用makeObjectsPerformSelector:方法来设置NSMutableArray中所有对象的更改值:
[self.players makeObjectsPerformSelector:@selector(setIsEliminated:) withObject:@NO];