수색…


통사론

  • NSAssert (condition, fmtMessage, arg1, arg2, ... ) (이탤릭체로 표시된 args는 선택 사항입니다.) - 조건 이 true 값으로 평가됩니다. 만약 assertion이 아닌 경우에는 제공된 인수로 포맷 된 fmtMessage 와 함께 예외 (NSAssertionException)가 발생합니다

주장

@implemenetation Triangle

...

-(void)setAngles:(NSArray *)_angles {
    self.angles = _angles;
    
    NSAssert((self.angles.count == 3), @"Triangles must have 3 angles. Array '%@' has %i", self.angles, (int)self.angles.count);
    
    CGFloat angleA = [self.angles[0] floatValue];
    CGFloat angleB = [self.angles[1] floatValue];
    CGFloat angleC = [self.angles[2] floatValue];
    CGFloat sum = (angleA + angleB + angleC);
    NSAssert((sum == M_PI), @"Triangles' angles must add up to pi radians (180°). This triangle's angles add up to %f radians (%f°)", (float)sum, (float)(sum * (180.0f / M_PI)));
}

이러한 어설 션을 수행하면 예외가 발생하면 삼각형 각도가 잘못 부여되지 않습니다. 삼각형보다 예외를 던지지 않고 진정한 삼각형이 아닌 경우 나중에 코드에서 버그가 발생할 수 있습니다.

try catch 블록을 사용한 에러 및 예외 처리

예외는 존재하지 않는 배열 요소에 액세스하려는 것과 같은 프로그래머 수준의 버그를 나타냅니다.

오류는 존재하지 않는 파일을로드하는 것과 같은 사용자 수준의 문제입니다. 프로그램의 정상적인 실행 중에 오류가 예상되기 때문입니다.

예:

    NSArray *inventory = @[@"Sam",
                           @"John",
                           @"Sanju"];
    int selectedIndex = 3;
    @try {
        NSString * name = inventory[selectedIndex];
        NSLog(@"The selected Name is: %@", name);
    } @catch(NSException *theException) {
        NSLog(@"An exception occurred: %@", theException.name);
        NSLog(@"Here are some details: %@", theException.reason);
    } @finally {
        NSLog(@"Executing finally block");
    }

산출:

예외가 발생했습니다 : NSRangeException

*** - [__ NSArrayI objectAtIndex :] : 범위를 벗어난 인덱스 3 [0 .. 2]

최종 블록 실행 중



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow