2014-11-24 5 views
1

containsObject를 구현하려고하지만 두 개의 매개 변수로 구현하려고 시도하고 있습니다. 가능합니까?배열에 두 개의 객체가 포함되어 있는지 확인

if ([ myArray containsObject:@"Object1", @"Object2"]){ 
    return result; 
} else { 
    return NO; 
} 

을 분명히 너무 많은 인수를있다 :

은 현재 내가 가지고있다. 나는 애플의 문서를 통해 탐구했지만 아직 아무것도 찾을 수 없다. 어떤 제안?

+1

containsObject는 하나의 인수 만 사용합니다. && 연산자를 사용하십시오. – mikemike396

답변

2

왜 이렇게하지 않습니까?

if ([ myArray containsObject:@"Object1" ] && [ myArray containsObject:@"Object 2" ]){ 
    return result; 
} else { 
    return NO; 
} 
1

거기에 인자가 너무 많습니다. containsObject는 단일 객체 용입니다. (공식 문서 here을 읽을 수 있습니다.) 문제를 해결하려면 && 연산자를 사용하고 각 객체에서 containsObject를 개별적으로 호출하십시오.

if ([myArray containsObject:@"Object1"] && [myArray [email protected]"Object2"]){ 
    return result; 
} else { 
return NO; 
} 
1

개별적으로 평가해야합니다. 예 :

bool MONNSArrayContainsAllObjectsIn(NSArray* const pArray, NSArray* const pSought) { 
assert(pArray); 
assert(pSought); 
assert(0 < pSought.count); 

for (id at in pSought) { 
    if (false == [pArray containsObject:at]) { 
    return false; 
    } 
} 
return true; 
} 

이 그런 다음 위의 코드가됩니다 :

return MONNSArrayContainsAllObjectsIn(myArray, @[@"Object1", @"Object2"]); 

(이 경우 2) 요소의 알려진 번호로 작업하는 경우에는, 당신은 임시 배열을 생성 피할 수 - 경우 최적화를하고 매개 변수를 포함하여 필요한 모든 변형을 작성하는 것을 선호합니다. 다른 답변은이 방법을 자세히 설명합니다.

대규모 어레이와 많은 비교를 수행하려면 NSSet이 작업에 더 적합 할 수 있습니다.

+0

처음에는 이것이 불필요하게 복잡해 보였지만 오류 검사와 함께보다 추상적/유연한 접근 방식을 만드는 것이 합리적입니다. 'const'의 목적/이점을 설명해 주시겠습니까? 그들이 불변의 NSArrays라면, 왜'const'가 필요한가? – mc01

+1

varargs를 사용하면 임시 NSArray가 생성되지 않습니다. –

+1

@ mc01이 예제의 const는 객체가 아닌 포인터에 적용됩니다. const ObjC 객체는 실제로별로 유용하지 않습니다. 포인터에 const를 적용하면 포인터의 값이 변경되지 않을 수도 있음을 단순히 선언합니다. 이것은 객체에 대한 const의 유무에 독립적입니다. const-introduction을 많이 사용하는 것처럼 개발자 (주관자)를 돕는 것이 아니라 필수적입니다. '++ pArray','--pArray','pArray = nil','pArray + = 2','pArray = 0','pArray = pSought'와 같은 const 포인터에 의해 금지 된 연산의 예. – justin