2011-01-11 12 views
0

,이 같은 프로토콜이 있습니다목표 - C 상수 내 목표 - C 프로젝트에서

@protocol MyProtocol 

-(id) get:(NSString *) key; 

-(void) set:(NSString *) key withValue:(id) value; 

-(NSValue *) getSize; 

-(void) setSize:(NSValue *) value; 

-(NSValue *) getBounds; 

-(void) setBounds:(NSValue *) value; 

@end 

OBJC_EXPORT const NSString *MYPROTOCOL_SIZE; 
OBJC_EXPORT const NSString *MYPROTOCOL_BOUNDS; 

그리고 기본적으로, 그 구체적인 방법 (getSize, getBounds, setSize, setBounds)이 값을 해야하는를 그 MYPROTOCOL_SIZEMYPROTOCOL_BOUNDS에 각각 저장되어야합니다.

그러나 다른 방법의 결과를 연결하여 이러한 상수 문자열을 설정하는 효과적인 방법을 찾을 수 없습니다. 직접 입력하려고하면 initializer element is not constant 오류가 발생합니다. 객체가 항상 초기화된다는 것을 보장 할 수있는 방법이 있습니까? (예 : 클래스 load 방법), 내 프로그램이 실행될 때 수동으로 코드를 호출 할 필요가 없습니까?

+0

아마도 C 프로그래밍 언어에서 사용되는'const' 키워드의 의미를 Google에 알려야할까요? –

답변

-1

글쎄 우선, 명명 규칙을 알아야합니다. 접근 자에 대해 - (유형); 및 - (void) set : (유형) 값; 반면에 네가 한 일은 - (Type) get; 및 - (void) set : (유형) 값;

크기 및 경계 액세서에도 @property를 사용하는 것이 좋습니다.

이제 NSString 변수 선언의 "const"에 대해 이해가되지 않습니다. Const는 왼쪽에있는 유형에 적용되며 행의 시작 부분에있는 경우 오른쪽의 토큰에 직접 적용됩니다. 그래서 당신은 NSString이 이미 불변이고 const 객체에 메시지를 보내면 경고 나 에러를 발생시키지 않기 때문에 "const NSString"이됩니다 ...

실제로 원하는 것은 무엇입니까? "NSString * const"는 NSString에 대한 포인터가 상수라는 것을 나타내며 초기화시에만 할당 할 수 있습니다. 그러면 변경되지 않습니다 ...

이제 프로토콜에 대해 ... 당신의 경우 프로토콜? 그리고 2ONString을 읽기 전용 접근 자로 사용하는 추상 클래스가 아닙니까?

+0

네, 프로토콜이 필요합니다. 그리고 여러분은 상수 문자열에 대해 옳습니다 ... 제가이 방법으로하고있는 이유는, 제가 주로 자바로부터 다른 프로젝트로 이것을 포팅했기 때문입니다. 이것은 본질적으로 미니입니다 - 유형의 사전 ... –