iOS自定义结构体

作者: 追沐 | 来源:发表于2017-07-29 18:07 被阅读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)];

    四、最后

    • 结构体定义起来个人觉得还是比较麻烦的,但是一次定义了之后用起来还是很好用的。
    • OC中结构体真是很好用,但是对性能什么的会不会造成什么大的影响这还没研究,应该是不会吧,我看在官方的文档中也用了很多结构体,有兴趣的小伙伴我们可以一起交流交流。

    相关文章

      网友评论

        本文标题:iOS自定义结构体

        本文链接:https://www.haomeiwen.com/subject/ezjclxtx.html