programing

목표-C 구조의 기본값 및 테스트 방법

cafebook 2023. 8. 1. 20:47
반응형

목표-C 구조의 기본값 및 테스트 방법

저는 아직 속성이 설정되지 않았는지 테스트하려고 합니다.저는 제가 가지고 있는 물건에 대해 알고 있습니다.

CGRect ppGoalFrame;
LocalPlaySetup *localPlaySetup;

그리고 나는 테스트할 수 있습니다.

if (localPlaySetup == nil)

하지만 == nil 또는 == NULL로 CGRect를 테스트하려고 하면

if (ppGoalFrame == nil)

알겠습니다

invalid operands to binary == (have 'CGRect' and 'void *')

그것도 그렇습니다.CGRect"null", null, nil...준비되기 전에?분명히 나는 CGrect를 무효 포인터와 비교할 수 없습니다(사용할 수 없습니다).ppGoalFrame == void); 이것을 테스트할 다른 방법이 있습니까?지금까지의 목표-C는 꽤 이해하기 쉽지만, 클룸이 닫히자마자, 저는 약간 길을 잃습니다.

포인터만 null일 수 있습니다.CGRect는 구조체이며 연속적인 메모리 블록을 나타냅니다.내용을 확인하도록 설정되었는지 확인할 수 있는 유일한 방법입니다.

Apple은 상수를 제공합니다.CGRectNull변수를 이 값으로 설정하고 CGRectIsNull 함수를 사용하여 설정되었는지 확인할 수 있습니다.CGRectNull와 동일하지 않습니다.CGRectZero따라서 원하는 값이 0이더라도 걱정할 필요가 없습니다.

CGRectNull에는 나중에 CGRectIsNull 함수에 대해 Apple에서 식별할 수 있는 값으로 채워진 CGRect 구조만 포함됩니다.포인터를 비교할 때와 동일한 null이 아닙니다.

Objective-C 클래스의 모든 인스턴스 변수는 0으로 초기화됩니다.그래서 모든 포인터는.nil숫자는 0이고 구조체는 0입니다.CGRect는 단순한 구조이므로 다음과 같이 초기화됩니다.origin.x=0, origin.y=0, size.width=0, size.height=0.

그래서 테스트를 하기 위해서는CGRect설정되었습니다. (값 기준) 0과 비교해야 합니다.CGRectIsEmpty함수는 정확하게 다음을 수행합니다.

if (CGRectIsEmpty(ppGoalFrame))
{
    // ...
}

부터CGGeometry.h:

/* Return true if `rect' is empty (that is, if it has zero width or height),
   false otherwise. A null rect is defined to be empty. */

빈 사각형은 영역이 없는 사각형으로, 양쪽이 모두 0입니다.
대신 사용:

CGRect newRect = CGRectNull;

보편적인 "아무것도" 값은 없습니다.있다nil대상 및NULL포인터의 경우 일반 값 유형에 해당하는 값이 없습니다. 단순한 넌센스인 경우에도 항상 어느 정도의 값을 가집니다.임의의 값을 사용하여 "이 유형에 대한 null 값을 호출합니다."라고 말할 수 있습니다(예:#define IntNull 4444444계산 결과 실수로 해당 값이 반환되지 않기를 바랍니다.) 하지만 실제 null 값은 없습니다.

특히 CGRect의 경우, Apple은 "임의적인 값 선택" 전술을 사용하여 정의했습니다.CGRectNull그러나 CGRect 변수는 기본적으로 설정되지 않으므로 사용자가 직접 설정해야 합니다.기본적으로 CGRect 인스턴스 변수는 다음과 같이 설정됩니다.CGRectZero그러나 이것은 폭이 0이고 높이가 0인 위치(0.0)에 있는 일반적인 CGRect 구조입니다.함수의 로컬 CGRects는 완전히 예측할 수 없는 값을 가집니다.

CGRect를 NSValue로 래핑할 수도 있습니다.

[NSValue valueWithCGRect:CGRectMake(x, y, width, height)]

그리고 나서 피하세요.nilvalue.value.value.

사실 명백하고 우아한 해결책이 있습니다(웃음).

SomeStruct someStruct = {0};

그것은 단지 구조의 모든 "요소"를 0으로 채웁니다.

저는 당신이 CGRect가 무엇인지에 대한 C 구조의 이진 비교를 할 수 있다고 생각하지 않습니다.빠른 구글 검색과 C For Dummies Desk Reference 확인은 아무것도 나타나지 않았습니다.CGRect ppGoalFrame을 선언하고, 구조물의 멤버를 기본값으로 초기화하고, 구조물 멤버를 테스트할 수 있습니다.

업데이트 편집:이 질문은 C 구조에 대해 제기되었습니다.

언급URL : https://stackoverflow.com/questions/2414809/default-value-of-an-objective-c-struct-and-how-to-test

반응형