2012-01-23 3 views
4

다음 Objective-C 문이 올바르게 작동하지 않습니다.Objective-C에서 삼항 연산자를 사용하는 한계는 무엇입니까?

cell.templateTitle.text=[(NSDictionary*) [self.inSearchMode?self.templates:self.filteredTemplates objectAtIndex:indexPath.row] objectForKey:@"title"]; 

그러나 나는 이것을 if() 문으로 나누면 잘 동작합니다.

if(self.inSearchMode){ 
    categorize=[(NSDictionary*)[self.filteredTemplates objectAtIndex:indexPath.row] objectForKey:@"categorize"]; 
} else { 
    categorize=[(NSDictionary*)[self.templates objectAtIndex:indexPath.row] objectForKey:@"categorize"]; 
} 

Objective-C에서 삼항 연산자를 사용할 때의 제한 사항은 무엇입니까? C#와 같은 다른 언어에서는 위의 3 진 성명이 올바르게 작동했을 것입니다.

+0

무슨 에러가 발생합니까 : (그리고 당신이 정말로 삼항 연산자의 사용을 주장하는 경우)) 대신 같은 것을 할 경우

그러나 코드가 더 읽을 수? –

+0

오류가 없습니다. 그 결과는 무효입니다. – ChrisP

+0

코드가 동일하지 않습니다. 코드의 두 비트 모두 정확히 반대 템플릿에 액세스합니다. 그들 중 하나는 틀린 것이고, 어떤 것을 말하기는 불가능합니다. – gnasher729

답변

10

내 생각 엔 운영 명령 문제라고 생각합니다. 당신은 시도 :

[(self.inSearchMode?self.templates:self.filteredTemplates) objectAtIndex:indexPath.row] 

(통지 괄호를 추가)

8

@cesarislaw이 작업의 순서에 대한 아마 권리입니다.

NSDictionary * templates = (NSDictionary *) (self.inSearchMode ? self.filteredTemplates : self.templates); 

categorize = [[templates objectAtIndex:indexPath.row] objectForKey:@"categorize"]; 
+0

보다 읽기 쉽고 정확하며 빠르며 디버깅에 훨씬 좋습니다. 템플릿 사전이 nil인지 여부를 확인하려면 중단 점을 설정하십시오. 나는 objectAtIndex의 결과에 대한 또 다른 문장을 추가 할 것이다. – gnasher729

관련 문제