2013-10-14 2 views
2

선언 할 때 크기를 결정할 수있는 하위 클래스 개체를 만들려고합니다. 예를 들어 "circle (int width, int height)"에 가까운 것을하고 C4WorkSpace에서 원의 크기를 정의하는 두 개의 숫자를 지정합니다.C4의 하위 클래스에 매개 변수를 지정하는 방법

- (id) initWithNumber: (int) n { 
    self = [super init]; ❶ ❷ 
    if (self) { 
     self->_number = n; ❸ 
    } 
    return self; ❹ 
} 

을 ...하지만 나는 확실히 그것을 사용하고 어디를 넣어하는 방법을 이해하지 못했다 : 내가 제대로 이해하면이처럼, 그것을 위해 이니셜 라이저를 사용할 수 있습니다.

다음은 내가 작업하고있는 코드입니다. 타원의 매개 변수에 "크기"를 삽입했습니다. 단지 내가하려고하는 것을 설명하기 위해서입니다. 내 circle.h 파일 :

#import "C4Shape.h" 

@interface circle : C4Shape 

@end 

그리고 circle.m 하나

#import "circle.h" 

@implementation circle 

-(void) setup 
{ 
    [self addGesture:PAN name:@"pan" action:@"move:"]; 
    [self addGesture:TAP name:@"tap" action:@"changeColour"]; 
    [self ellipse:CGRectMake(0, 0, size, size)]; 
    [self setFillColor:[UIColor blackColor]]; 
    [self setStrokeColor:[UIColor blackColor]]; 
} 

-(void) changeColour 
{ 
    self.fillColor = [UIColor colorWithRed:[C4Math randomInt: 100]/100.0f green:[C4Math randomInt: 100]/100.0f blue:[C4Math randomInt: 100]/100.0f alpha:1.0f]; 
} 

@end 

어떻게이 경우, C4의 서브 클래스에 변수를 속성 수있는 가장 좋은 방법은? 가능하다면 C4WorkSpace.m에서 객체를 어떻게 생성하는지 설명 할 수 있습니까?

감사합니다. 그리고 내가 분명하지 않다면 미안해.

답변

1

이렇게 할 수 있습니다. 다른 파일에서 헤더 파일을 볼 수 있도록 이니셜 라이저 메서드를 헤더 파일에 선언해야합니다. size이라는 인스턴스 변수를 만들어 사용자 번호로 설정해야합니다. 또는 property을 사용할 수도 있습니다. Cirlce.m 파일에 정의를 제공합니다. 클래스의 인스턴스 변수이므로 self-> size를 크기로 변경했습니다.

C4Workspace.m에서 헤더 파일을 가져와야 할 경우 파일의 어느 곳에서나 개체 중 하나를 만들 수 있습니다. 개체를 만들려면 allocinitWithNumber에 전화해야합니다. 모든 코드를 제공 한 곳이므로 화면에 나타나려면 setup으로 전화해야합니다.

관련 토론은 C4: Add panning to an object other than "self"을 확인하십시오.

Circle.h

#import "C4Shape.h" 

@interface Circle : C4Shape 

- (id) initWithNumber: (int) n; 

@end 

Circle.m

#import "Circle.h" 

@implementation Circle 
{ 
    int size; 
} 

- (id) initWithNumber: (int) n { 
    self = [super init]; 
    if (self) { 
     size = n; 
    } 
    return self; 
} 

-(void) setup 
{ 
    [self addGesture:PAN name:@"pan" action:@"move:"]; 
    [self addGesture:TAP name:@"tap" action:@"changeColour"]; 
    [self ellipse:CGRectMake(0, 0, size, size)]; 
    [self setFillColor:[UIColor blackColor]]; 
    [self setStrokeColor:[UIColor blackColor]]; 
} 

-(void) changeColour 
{ 
    self.fillColor = [UIColor colorWithRed:[C4Math randomInt: 100]/100.0f green:[C4Math randomInt: 100]/100.0f blue:[C4Math randomInt: 100]/100.0f alpha:1.0f]; 
} 

@end 

C4Workspace.m

#import "C4Shape.h" 

#import "C4WorkSpace.h" 
#import "Circle.h" 

@implementation C4WorkSpace 
{ 
    Circle * c; 
} 

-(void)setup 
{ 
    c = [[Circle alloc] initWithNumber:100]; 
    [c setup]; 

    [self.canvas addSubview:c]; 
} 

@end 
+0

, 너무 아담을 주셔서 감사합니다! 이제 이니셜 라이저를 이해합니다. –