[c] NSLog C Structs (CGRect 또는 CGPoint와 같은)가 가능합니까?

구성하는 모든 속성을 명시 적으로 입력하지 않고도 C 구조를 디버깅 할 수 있기를 원합니다.

즉, 나는 이런 식으로 할 수 있기를 원합니다.

CGPoint cgPoint = CGPointMake(0,0);
NSLog(@"%@",cgPoint);

분명히 ‘% @’는 작동하지 않으므로 질문입니다.



답변

당신은 이것을 시도 할 수 있습니다 :

NSLog(@"%@", NSStringFromCGPoint(cgPoint));

다양한 CG 구조체를 s 로 변환하는 UIKit 에서 제공 하는 많은 기능이 있습니다 NSString. 작동하지 않는 이유 %@는 객체를 의미 하기 때문 입니다. A는 CGPointC 구조체 (그리고 그렇게되어 CGRectS와 CGSizeS).


답변

다음과 같은 몇 가지 기능이 있습니다.

NSStringFromCGPoint
NSStringFromCGSize
NSStringFromCGRect
NSStringFromCGAffineTransform
NSStringFromUIEdgeInsets

예를 들면 :

NSLog(@"rect1: %@", NSStringFromCGRect(rect1));


답변

NSLog(@"%@", CGRectCreateDictionaryRepresentation(rect));


답변

다음 매크로를 사용하여 NSRect를 쉽게 이해할 수 있습니다.

#define LogRect(RECT) NSLog(@"%s: (%0.0f, %0.0f) %0.0f x %0.0f",
    #RECT, RECT.origin.x, RECT.origin.y, RECT.size.width, RECT.size.height)

CGPoint와 비슷한 것을 할 수 있습니다.

@define LogCGPoint(POINT) NSLog(@"%s: (%0.0f, %0.0f)",
    #POINT POINT.x, POINT.y);

다음과 같이 사용하십시오.

LogCGPoint(cgPoint);

다음을 생성합니다.

cgPoint: (100, 200)


답변

NSValue이것을 위해 사용할 수 있습니다 . NSValue의 목적은 단일 또는 목표 C-C의 데이터 항목에 대한 간단한 컨테이너이다. 포인터, 구조체 및 객체 ID뿐만 아니라 int, float 및 char와 같은 스칼라 유형을 보유 할 수 있습니다.

예:

  CGPoint cgPoint = CGPointMake(10,30);
    NSLog(@"%@",[NSValue valueWithCGPoint:cgPoint]);

출력 : NSPoint: {10, 30}

그것이 당신을 돕기를 바랍니다.


답변

스택 오버플로의 깨진 RSS 가이 질문을 다시 부활 시켰기 때문에 거의 일반적인 해결책은 다음과 같습니다 .JAValueToString

이것은 당신이 작성할 수 있습니다 JA_DUMP(cgPoint)얻을 cgPoint = {0, 0}기록.


답변

예, 다음과 같은 몇 가지 함수를 사용할 수 있습니다. 먼저 CGPoint 구조체를 문자열로 변환해야합니다 (예제 참조).

1) NSStringFromCGPoint,
2) NSStringFromCGSize,
3) NSStringFromCGRect,
4) NSStringFromCGAffineTransform,
5) NSStringFromUIEdgeInsets,

예를 들면 다음과 같습니다.

1) NSLog(@"NSStringFromCGPoint = %@", NSStringFromCGRect(cgPointValue));

이렇게 …