2010-06-07 4 views
0

나는 거의 동일한 코드 인을 가진 몇 개의 클래스가 있습니다. 두 문자열 만 다릅니다. 내가하고 싶은 것은 그 함수를 정의한 다른 클래스에서 "x"를 만들고 나서 상수 나 다른 것을 사용하여 다른 문자열을 정의하는 것입니다. "x"가 상속인지 또는 확장인지 확실하지 않습니다. 그것이 내가 도움이 필요한 것입니다. 예를 들어Objective-C 프로토콜 대 상속?

:

objectA.m :

-(void)helloWorld { 
    NSLog("Hello %@",child.name); 
} 

objectBob.m :

#define name @"Bob" 

objectJoe.m

#define name @"Joe" 

(내가 잘 모르겠어요 문자열을 정의하는 것은 합법적이지만, 이것은 e point across)

objectBob.m과 objectJoe.m이 objectA.m과의 관계 만 정의 할 필요가없는 것이 이상적입니다. 이런 식으로 할 수있는 방법이 있습니까? 그것은 반대의 경우를 제외하고는 프로토콜과 비슷합니다. 실제로 "프로토콜"에서 함수를 정의하고 싶습니다.

-(void)helloWorld:(NSString *name) { 
    NSLog("Hello %@",name); 
} 

을 그리고 다른 파일이 그 기능 (그냥 #import objectA.m)로 전화가 : 다른 모든 실패하면


난 그냥 objectA.m을 만들 수 있습니다.

답변

2

서브 클래스에 메소드를 작성하십시오. 하나의 기본 클래스가 필요하고 각 유형의 서브 클래스가 필요합니다.

는 다음을 수행하십시오

- (void)helloWorld { 
    NSLog(@"hello %@", [self name]); 
} 

편집 : 메소드의 이름과 같은 고정 된 비 objc. 다시 수정 : 고정 된 방법입니다.

+0

+1 코코아 명명 표준에 의해 "이름"이라고 불린다. –

+0

Objective-C getter 메소드는'get'이라는 단어를 사용하지 않습니다. 그것은 단지 '[자기 이름]'일 것입니다. 'get '로 시작하는 메소드는, 제공된 버퍼가 채워지고 있는지, 리모트 리소스가 꺼내지고 있는지를 나타냅니다. – Chuck

+0

그게 잘 작동하는 것 같습니다. 기본 클래스에서 필요로하는 함수 (예 : 이름)를 정의하는 프로토콜과 연결할 수 있습니까? 실제로, "name"은 메소드가 될 필요가 있거나 서브 클래스에 대해 상수로 만드는 방법이 있습니까? – RyanJM

0

나에게 상속과 같은 소리가납니다. helloWorld 메소드를 NSLog(@"Hello %@", name)으로 정의하고 서브 클래스가 name 인스턴스 변수에 다른 값을 제공하도록하십시오. (인스턴스 변수는 전처리 매크로가 아니라,이 목적에 쓸모가 없다.)

+0

인스턴스 변수에서 벗어나 클래스 메서드에 사용할 수있는 방법이 있습니까?또는 chpwn과 같은 메서드 호출 만 수행하는 유일한 방법은 무엇입니까? – RyanJM

+0

클래스별로 동작을 사용자 지정하는 유일한 방법은 메서드 및 인스턴스 변수입니다. 메소드 호출을 사용하는 것에 대해 왜 싫어합니까? – Chuck