2011-04-30 5 views
1

다음과 같은 두 가지 메서드가있는 프로토콜을 사용하고 있습니다.대리자 메서드 중 하나를 @required로 설정하십시오.

클래스가이 프로토콜을 확인하면 해당 클래스는 이러한 메소드 중 적어도 하나를 구현해야합니다. 나는 에 대해 알고있다.@ 선택적인 키워드를 알아야한다. @required를 사용하면 Xcode는 두 가지 방법 모두를 구현하도록 경고합니다. @ 옵션을 사용하면 Xcode는 메소드를 구현하도록 경고하지 않습니다. 방법 중 하나만 구현하는 것이 필요하다는 것을 지정하는 방법은 무엇입니까?

답변

4

프로토콜 방법은 필수 또는 선택 사항입니다. 당신이 요구하는 것은 컴파일 할 때 확인할 수 없습니다. 그러나 두 방법 모두를 선택 사항으로 표시하고 대리인이 런타임에 구현하는 방식을 확인할 수 있습니다. 다음과 유사한 내용 :

// In ActionPerformer.m. 
SEL selector = @selector(actionCompletedWithMessage:); 
if ([self.delegate respondsToSelector:selector]) { 
    // ... 
} else if ([[self.delegate class] respondsToSelector:selector]) { 
    // ... 
} else { 
    [NSException raise:NSInvalidArgumentException format:@"delegate doesn't " 
     "implement actionCompletedWithMessage:."]; 
} 
관련 문제