문제

합성을 사용한 후 재정의하려는 Setter 메소드 (SetMinimumnumberOfSides)가 있습니다. 그것에서, 나는 인스턴스 변수에 대한 제약 조건을 입력하여 int가 특정 한계 내에 있는지 확인합니다.

나중에 사용자 정의 init 메소드에서 다른 인스턴스 변수 (숫자 오프 사이드)를 설정했지만 최소한의 최소 인더 로프 시드와 최대 맨 럼버프 사이드가 경계 내에서 올바르게 설정되어 있는지 확인해야합니다. 세터의 반환 값을 부울로 변경하려고 시도 했으므로 성공/실패한 경우 예 또는 아니오를 다시 전달할 수 있었지만 충돌하는 방법을 만들어 냈습니다. 합성을 사용하고 세터를 재정의하고 있기 때문에 추측하고 있습니다.

Setter가 호출되어 성공적으로 반환되었는지 확인하기 위해 정보를 쉽게 가져 오려면 어떻게해야합니까?

-(void)setNumberOfSides:(int)sides
{
    if ((sides < maximumNumberOfSides) && (sides > minimumNumberOfSides))
    {
        numberOfSides = sides;  
    }
    else
        NSLog (@"Invalid number of sides: %d is outside the constraints allowed", sides);


}

-(void)setMinimumNumberOfSides:(int)minimum 
{
    if (minimum > 2)
        minimumNumberOfSides = minimum;

}

-(void)setMaximumNumberOfSides:(int)maximum 
{
    if (maximum <= 12)
        maximumNumberOfSides = maximum;

}

-(id)initWithNumberOfSides:(int)sides minimumNumberOfSides:(int)min maximumNumberOfSides:(int)max 
{
    if (self = [super init])
    {
        self.minimumNumberOfSides = min;
        self.maximumNumberOfSides = max;

        self.numberOfSides = sides;
    }
    return self;
}
도움이 되었습니까?

해결책

getter and setter를 구현하려는 경우 숫자를 합성 할 필요가 없습니다. 없이 @synthesize numberOfSides 선택하면 부울을 반환 할 수 있습니다. 그에 따라 인터페이스에서 getter/setter를 선언해야합니다.

BTW, 또 다른 접근 방식은 합성 된 게터/세터를 사용하고 별도의 방법을 추가하는 것입니다. -(BOOL)isNumberOfSidesValid 이 점검을 수행합니다.

다른 팁

이와 같은 상황에서는 간단한 전화를 사용하는 것이 좋습니다. assert(), 또는 예외를 던지는 것.

선택은이 클래스가 사용되는 방법에 따라 다릅니다. 도서관의 일부가되고 다른 개발자가 자주 잘못된 값을 공급할 것으로 기대하는 경우 minimumNumberOfSides 또는 maximumNumberOfSides, 당신은 아마도 적절한 예외를 던질 것입니다.

경고의 말씀하지만. 당신이 기대한다면 응용 프로그램 사용자 잘못된 값을 자주 공급하려면 예외가 나쁜 생각입니다. Objective-C의 예외 처리는 비싼 작업입니다. 사용자를 위해 이러한 점검이 마련된 경우 입력 유효성 검사를 수행하고 훨씬 더 친숙한 방식으로 사용자에게 오류를보고해야합니다.

편집하다: 다음은 몇 가지 빠른 샘플 코드입니다.

-(void)setMinimumNumberOfSides:(int)minimum
{
    if (minimum <= 2)
    {
        [NSException raise:@"invalid minimumNumberOfSides value"
                    format:@"value of %d is too low (must be > 2)", minimum];
    }

    minimumNumberOfSides = minimum;
}

편집하다: 여기에 있습니다 또 다른 질문입니다 그것은 Objective-c의 예외 처리에 대해 자세히 설명합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top