나의 첫번째 본능은 오브젝티브 C와있는 NSArray의 모든 케이크와NSArray에서 특정 종류의 객체를 찾는 방법은 무엇입니까?
FooType *myFoo = nil;
for (id obj in myArray) {
if ([obj isKindOfClass:[FooType class]]) myFoo = obj;
}
이며, 꼭 바로, 더 나은 방법이있을거야?
나의 첫번째 본능은 오브젝티브 C와있는 NSArray의 모든 케이크와NSArray에서 특정 종류의 객체를 찾는 방법은 무엇입니까?
FooType *myFoo = nil;
for (id obj in myArray) {
if ([obj isKindOfClass:[FooType class]]) myFoo = obj;
}
이며, 꼭 바로, 더 나은 방법이있을거야?
. 자신의 NSArray
메소드를 작성하는 것이 좋습니다.
아니요. 그것이 당신이하는 방법입니다. 새로운 iOS4 API에서 블록을 허용하는 버전이있을 수 있지만 조금 더 간단 할 수도 있습니다.
FooType *myFoo = nil;
NSUInteger index = [myArray indexOfObjectPassingTest:^BOOL (id obj, NSUInteger idx, BOOL *stop) {
return [obj isKindOfClass:[FooType class]];
}];
if (index != NSNotFound) myFoo = [myArray objectAtIndex:index];
정말 아니다 어떤 짧은 : (아이폰 OS 4 또는 스노우 레오파드에서) 블록 지원으로
언급 된 jtbandes와 마찬가지로,이 작업을 많이 수행하려는 경우 NSArray
메소드를 카테고리로 작성할 수 있습니다. 이런 식으로 뭔가 :
@interface NSArray (FindClass)
- (NSMutableArray *) findObjectsOfClass:(Class)theClass
@end
다음
@implementation NSArray (FindClass)
- (NSMutableArray *) findObjectsOfClass:(Class)theClass {
NSMutableArray *results = [[NSMutableArray alloc] init];
for (id obj in self) {
if ([obj isKindOfClass:theClass])
[results addObject:obj];
}
return [results autorelease];
}
@end
그때 당신이 그것을 사용하고자하는 바로 수행
NSMutableArray *objects = [myArray findObjectsOfClass:[FooType class]];
지정된 클래스의 모든 개체를 보유해야한다.
면책 조항 : 테스트하지 마시고, 잘못되어 사과드립니다./