关于OC中直接打印结构体,点(CGRect,CGSize,CGPoint,UIOffset)等数据类型

关于OC直接打印结构体,点(CGRect,CGSize,CGPoint,UIOffset)等数据类型,我们完全可以把其转换为OC对象来进项打印调试,而不必对结构体中的成员变量进行打印.就好比我们可以使用NSStringFromCGRect(CGRect rect)来直接打印一个结构体,其他打印可以参考以下内容

UIKIT_EXTERN NSString *NSStringFromCGPoint(CGPoint point);

UIKIT_EXTERN NSString *NSStringFromCGVector(CGVector vector);

UIKIT_EXTERN NSString *NSStringFromCGSize(CGSize size);

UIKIT_EXTERN NSString *NSStringFromCGRect(CGRect rect);

UIKIT_EXTERN NSString *NSStringFromCGAffineTransform(CGAffineTransform transform);

UIKIT_EXTERN NSString *NSStringFromUIEdgeInsets(UIEdgeInsets insets);

UIKIT_EXTERN NSString *NSStringFromUIOffset(UIOffset offset);

OC中好多几何学中的内容,一般都包括在 UIGeometry.h 文件中 仔细看看,可以学到好多东西

  1  NS_ASSUME_NONNULL_BEGIN
  2
  3 typedef struct UIEdgeInsets {
  4     CGFloat top, left, bottom, right;  // specify amount to inset (positive) for each of the edges. values can be negative to ‘outset‘
  5 } UIEdgeInsets;
  6
  7 typedef struct UIOffset {
  8     CGFloat horizontal, vertical; // specify amount to offset a position, positive for right or down, negative for left or up
  9 } UIOffset;
 10
 11 typedef NS_OPTIONS(NSUInteger, UIRectEdge) {
 12     UIRectEdgeNone   = 0,
 13     UIRectEdgeTop    = 1 << 0,
 14     UIRectEdgeLeft   = 1 << 1,
 15     UIRectEdgeBottom = 1 << 2,
 16     UIRectEdgeRight  = 1 << 3,
 17     UIRectEdgeAll    = UIRectEdgeTop | UIRectEdgeLeft | UIRectEdgeBottom | UIRectEdgeRight
 18 } NS_ENUM_AVAILABLE_IOS(7_0);
 19
 20 UIKIT_STATIC_INLINE UIEdgeInsets UIEdgeInsetsMake(CGFloat top, CGFloat left, CGFloat bottom, CGFloat right) {
 21     UIEdgeInsets insets = {top, left, bottom, right};
 22     return insets;
 23 }
 24
 25 UIKIT_STATIC_INLINE CGRect UIEdgeInsetsInsetRect(CGRect rect, UIEdgeInsets insets) {
 26     rect.origin.x    += insets.left;
 27     rect.origin.y    += insets.top;
 28     rect.size.width  -= (insets.left + insets.right);
 29     rect.size.height -= (insets.top  + insets.bottom);
 30     return rect;
 31 }
 32
 33 UIKIT_STATIC_INLINE UIOffset UIOffsetMake(CGFloat horizontal, CGFloat vertical) {
 34     UIOffset offset = {horizontal, vertical};
 35     return offset;
 36 }
 37
 38 UIKIT_STATIC_INLINE BOOL UIEdgeInsetsEqualToEdgeInsets(UIEdgeInsets insets1, UIEdgeInsets insets2) {
 39     return insets1.left == insets2.left && insets1.top == insets2.top && insets1.right == insets2.right && insets1.bottom == insets2.bottom;
 40 }
 41
 42 UIKIT_STATIC_INLINE BOOL UIOffsetEqualToOffset(UIOffset offset1, UIOffset offset2) {
 43     return offset1.horizontal == offset2.horizontal && offset1.vertical == offset2.vertical;
 44 }
 45
 46 UIKIT_EXTERN const UIEdgeInsets UIEdgeInsetsZero;
 47 UIKIT_EXTERN const UIOffset UIOffsetZero;
 48
 49 // 结构体等数据类型 --> OC对象
 50 UIKIT_EXTERN NSString *NSStringFromCGPoint(CGPoint point);
 51 UIKIT_EXTERN NSString *NSStringFromCGVector(CGVector vector);
 52 UIKIT_EXTERN NSString *NSStringFromCGSize(CGSize size);
 53 UIKIT_EXTERN NSString *NSStringFromCGRect(CGRect rect);
 54 UIKIT_EXTERN NSString *NSStringFromCGAffineTransform(CGAffineTransform transform);
 55 UIKIT_EXTERN NSString *NSStringFromUIEdgeInsets(UIEdgeInsets insets);
 56 UIKIT_EXTERN NSString *NSStringFromUIOffset(UIOffset offset);
 57
 58 // OC对象 --> 结构体等数据类型
 59 UIKIT_EXTERN CGPoint CGPointFromString(NSString *string);
 60 UIKIT_EXTERN CGVector CGVectorFromString(NSString *string);
 61 UIKIT_EXTERN CGSize CGSizeFromString(NSString *string);
 62 UIKIT_EXTERN CGRect CGRectFromString(NSString *string);
 63 UIKIT_EXTERN CGAffineTransform CGAffineTransformFromString(NSString *string);
 64 UIKIT_EXTERN UIEdgeInsets UIEdgeInsetsFromString(NSString *string);
 65 UIKIT_EXTERN UIOffset UIOffsetFromString(NSString *string);
 66
 67 @interface NSValue (NSValueUIGeometryExtensions)
 68
 69 + (NSValue *)valueWithCGPoint:(CGPoint)point;
 70 + (NSValue *)valueWithCGVector:(CGVector)vector;
 71 + (NSValue *)valueWithCGSize:(CGSize)size;
 72 + (NSValue *)valueWithCGRect:(CGRect)rect;
 73 + (NSValue *)valueWithCGAffineTransform:(CGAffineTransform)transform;
 74 + (NSValue *)valueWithUIEdgeInsets:(UIEdgeInsets)insets;
 75 + (NSValue *)valueWithUIOffset:(UIOffset)insets NS_AVAILABLE_IOS(5_0);
 76
 77 - (CGPoint)CGPointValue;
 78 - (CGVector)CGVectorValue;
 79 - (CGSize)CGSizeValue;
 80 - (CGRect)CGRectValue;
 81 - (CGAffineTransform)CGAffineTransformValue;
 82 - (UIEdgeInsets)UIEdgeInsetsValue;
 83 - (UIOffset)UIOffsetValue NS_AVAILABLE_IOS(5_0);
 84
 85 @end
 86
 87 @interface NSCoder (UIGeometryKeyedCoding)
 88
 89 - (void)encodeCGPoint:(CGPoint)point forKey:(NSString *)key;
 90 - (void)encodeCGVector:(CGVector)vector forKey:(NSString *)key;
 91 - (void)encodeCGSize:(CGSize)size forKey:(NSString *)key;
 92 - (void)encodeCGRect:(CGRect)rect forKey:(NSString *)key;
 93 - (void)encodeCGAffineTransform:(CGAffineTransform)transform forKey:(NSString *)key;
 94 - (void)encodeUIEdgeInsets:(UIEdgeInsets)insets forKey:(NSString *)key;
 95 - (void)encodeUIOffset:(UIOffset)offset forKey:(NSString *)key NS_AVAILABLE_IOS(5_0);
 96
 97 - (CGPoint)decodeCGPointForKey:(NSString *)key;
 98 - (CGVector)decodeCGVectorForKey:(NSString *)key;
 99 - (CGSize)decodeCGSizeForKey:(NSString *)key;
100 - (CGRect)decodeCGRectForKey:(NSString *)key;
101 - (CGAffineTransform)decodeCGAffineTransformForKey:(NSString *)key;
102 - (UIEdgeInsets)decodeUIEdgeInsetsForKey:(NSString *)key;
103 - (UIOffset)decodeUIOffsetForKey:(NSString *)key NS_AVAILABLE_IOS(5_0);
104
105 @end
106
107 NS_ASSUME_NONNULL_END
时间: 2024-09-29 09:03:03

关于OC中直接打印结构体,点(CGRect,CGSize,CGPoint,UIOffset)等数据类型的相关文章

黑马程序员-------oc中的结构体

oc中的结构体主要有CGPoint,CGSize,CGRect,NSRange; /* Points. */ struct CGPoint { CGFloat x; CGFloat y; }; typedef struct CGPoint CGPoint; /* Sizes. */ struct CGSize { CGFloat width; CGFloat height; }; /* Rectangles. */ struct CGRect { CGPoint origin; CGSize s

ios开发之封装自定义的结构体对象,CGRect,CGSize常用结构体基本使用

ios 中如何使用oc封装一个 结构体到  NSValue中呢? 方法如下: typedef struct{ //自定义一个结构体 int age; int number; }Student; NSValue *stu=[NSValue valueWithBytes:&stu objCtype :@encode(Student)];//把结构体封装成一个对象 Student value2;//定义一个结构体变量来接受从NSValue得到的结构体 [stu getValue:&value2]

关于c语言中的结构体使用偏移量求值问题

最近在看nginx源码,看到定时器的时候,发现一个结构体利用偏移量求值问题, 结构体相信做c开发的都遇到过,那么不知你对结构体中成员变量偏移这块是如何理解的; 首先我们先看一下nginx中的那个让我迷惑的地方 ev =    (event_t*)((char*)node - offsetof(event_t, timer)); 这里,可以得知道是利用event_t结构体的timer变量,来反求event_t结构体的地址 说明一下: event_t是一个结构体 node 也是一个结构体 timer

[转]C#中的结构体与类的区别

C#中的结构体与类的区别 经常听到有朋友在讨论C#中的结构与类有什么区别.正好这几日闲来无事,自己总结一下,希望大家指点. 1. 首先是语法定义上的区别啦,这个就不用多说了.定义类使用关键字class 定义结构使用关键字struct.在语法上其实类和结构有着很多相似的地方. 定义类的语法 1 class Person 2 { 3 private string name; 4 private int age; 5 6 public void SayHi() 7 { 8 Console.WriteL

C语言中的结构体和C++中的结构体以及C++中类的区别

c++中结构体可以定义一个函数 C中的结构体和C++中结构体的不同之处:在C中的结构体只能自定义数据类型,结构体中不允许有函数,而C++中的结构体可以加入成员函数. C++中的结构体和类的异同: 一.相同之处:结构体中可以包含函数:也可以定义public.private.protected数据成员:定义了结构体之后,可以用结构体名来创建对象.但C中的结构体不允许有函数:也就是说在C++当中,结构体中可以有成员变量,可以有成员函数,可以从别的类继承,也可以被别的类继承,可以有虚函数. 二.不同之处

C语言中的结构体,结构体数组

C语言中的结构体是一个小难点,下面我们详细来讲一下:至于什么是结构体,结构体为什么会产生,我就不说了,原因很简单,但是要注意到是结构体也是连续存储的,但要注意的是结构体里面类型各异,所以必然会产生内存对齐的问题.也就是内存里面会有空档. 1.结构体的定义和赋值 结构体是可以直接初始化的,在定义的时候,就可以初始化,而且如果你的结构体中恰好有字符数组的话,这个时候初始化是不错的选择,原因很简单,字符数组只能定义的时候直接初始化 后来就不可以了,后来你就只能用strcpy函数来拷贝初始化了. str

C++中的结构体

http://zhidao.baidu.com/link?url=8OYQSKV9mvSBc6Hkf9NsLQmipSge9VCZDJQGAZZs5PCBQ54UTmK98VRmAklEEAFYu7dHi9yhLhWeLsP4EwFW5_ c++中结构体可以定义一个函数 C中的结构体和C++中结构体的不同之处:在C中的结构体只能自定义数据类型,结构体中不允许有函数,而C++中的结构体可以加入成员函数. C++中的结构体和类的异同: 一.相同之处:结构体中可以包含函数:也可以定义public.pr

浅析C#中的结构体和类

类和结构是 .NET Framework 中的常规类型系统的两种基本构造. 两者在本质上都属于数据结构.封装着一组总体作为一个逻辑单位的数据和行为. 数据和行为是该类或结构的"成员",它们包括各自的方法.属性和事件等 对于C/C++程序员来说.结构体和类的差别非常小.仅仅是结构体的默认成员变量为public,类的默认成员变量为private. 可是对于C#来说,结构体和类有非常多的不同. 首先来谈一谈为何须要结构体: 最主要的原因就是结构体有能力去管理.使用不同数据类型的组合. .NE

x264中重要结构体参数解释,参数设置,函数说明 &lt;转&gt;

x264中重要结构体参数解释http://www.usr.cc/thread-51995-1-3.htmlx264参数设置http://www.usr.cc/thread-51996-1-3.html x264中重要结构体参数解释typedef struct x264_param_t{/* CPU 标志位 */unsigned int cpu;int         i_threads;       /* 并行编码多帧 */int         b_deterministic; /*是否允许非