2014-07-14 3 views
0

viewsubviews (전체 하위 뷰 포함)을 반복합니다."또는 파이프"(||) 버그?

이렇게하기 전에 새로운 int을 카운터로 사용할 것을 선언합니다.

카운트가 하드 코딩 된 값 ( !=) 같지 않으면 I 검사있어

:이

int count = 0; 

for (UIView *subview in self.view.subviews) { 
    count = count + 1; 

    if (count != 5) { 
     NSLog(@"Hello"); 
    } else { 
     NSLog(@"World"); 
    } 
} 

NSLog(@"World");는 카운트가 "5"(예상만큼 같을 때 불려) :이 문제에 이제

Hello Hello Hello Hello World Hello Hello Hello Hello Hello Hello Hello

, 내가 추가 "또는 파이프"경우 ( ||), 호출되지 않습니다 NSLog(@"World"); ( if)가 검증되지 않습니다.
int count = 0; 

for (UIView *subview in self.view.subviews) { 
    count = count + 1; 

    if (count != 5 || count != 6) { 
     NSLog(@"Hello"); 
    } else { 
     NSLog(@"World"); 
    } 
} 

Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello

지금이 문제는 구문을 변경하여 OFC 고정 할 수 있지만 if 확인되지 왜 제 질문은?

"같지 않음"(!=)을 "동일 함"(==)으로 변경하면 문제가 해결된다는 점에 유의해야합니다.

버그입니까? 놓친 것이 있습니까?

+2

항상 '카운트'가 5와 같지 않거나 6이 아닌 경우입니다. 둘 중 하나가 될 수도 있지만 동시에 둘 다 될 수는 없습니다. 조건문을 항상 true로 설정했습니다. –

+1

@KenThomases하지만 파이프 라인 ('||')을 사용하여 5 또는 6인지 확인하고 있습니다. 만약 내가 둘 다 어디에 있는지 확인하려면, 나는'&&'를 사용했을 것이다. 또한 ""같지 않음 "('! =')을"같음 "('==')으로 변경하면 문제가 해결됩니다." –

+0

@AleksanderAzizi 이것은 [De Morgan의 법칙] (http://en.wikipedia.org/wiki/De_Morgan's_laws)의 사례입니다. –

답변

3

조건은 항상 true입니다. count != 5 || count != 6이 주어진 경우 count == 5이면 후반이 참입니다. count == 6 인 경우, 전의 반은 참입니다. count가 다른 것과 같으면 그 진술은 참이다.

대신 &&을 사용해야 할 수도 있습니다.