杂问题Objective-C学习手册iOS-Objective-C

iOS自定义结构体

2017-07-29  本文已影响109人  追沐

一、提要

通过以官方的CGSize为例,自定义Objective-C中的结构体,并使用。

二、CGSize

1、定义结构体CGSize

/* Sizes. */

struct CGSize {
    CGFloat width;
    CGFloat height;
};
typedef struct CGSize CGSize;

对应的

struct 结构体名{
        类型名 成员名1;
        类型名 成员名2;
        ... ...
        类型名 成员名n;
};

上述首先自定义了一个结构体,这和C语言里面自定义结构体一样。typedef struct CGSize CGSize是给此结构体定义了一个别名,在OC里面结构体别名和结构体名尽量保持一致?看文档是这么写的。

2、CGSizeMake

/* Make a size from `(width, height)'. */

CG_INLINE CGSize CGSizeMake(CGFloat width, CGFloat height);

这里CG_INLINE是一个宏:# define CG_INLINE static inline,这是系统的一个宏,如果你不用这个宏,可以直接写成static inline CGSize CGSizeMake(CGFloat width, CGFloat height);

三、自定义结构体

这里以自定义一个button的点击范围的结构体为例

struct ClickSize {
    CGFloat top;
    CGFloat left;
    CGFloat bottom;
    CGFloat right;
};
typedef struct ClickSize ClickSize;

CG_INLINE ClickSize
ClickSizeMake(CGFloat top, CGFloat left, CGFloat bottom, CGFloat right)
{
    ClickSize clickSize;
    clickSize.top = top;
    clickSize.left = left;
    clickSize.bottom = bottom;
    clickSize.right = right;
    return clickSize;
};

这就OK了,就剩下使用了,使用的时候需要引入头文件。

这里是写一个扩大button点击方法的例子,使用了结构体

/**
 扩大button的点击范围

 @param size 设置点击区域,控制上、左、下、又的扩大外围
 */
- (void)enlargeClickAreaWithClickArea:(ClickSize)size;
/// 扩大button的点击范围
- (void)enlargeClickAreaWithClickArea:(ClickSize)size {
    objc_setAssociatedObject(self, &topNameKey, [NSNumber numberWithFloat:size.top], OBJC_ASSOCIATION_COPY_NONATOMIC);
    objc_setAssociatedObject(self, &rightNameKey, [NSNumber numberWithFloat:size.right], OBJC_ASSOCIATION_COPY_NONATOMIC);
    objc_setAssociatedObject(self, &bottomNameKey, [NSNumber numberWithFloat:size.bottom], OBJC_ASSOCIATION_COPY_NONATOMIC);
    objc_setAssociatedObject(self, &leftNameKey, [NSNumber numberWithFloat:size.left], OBJC_ASSOCIATION_COPY_NONATOMIC);
}

这里ClickSize直接被传入参数使用,传入参数的时候和CGSize一样,而且还会有提示,很好用。
[view enlargeClickAreaWithClickArea:CGSizeMake( 10, 10, 10, 10)];

四、最后

上一篇下一篇

猜你喜欢

热点阅读