美文网首页
关于自定义结构体

关于自定义结构体

作者: HCL黄 | 来源:发表于2019-09-29 15:33 被阅读0次

    1、为什么我要自定义结构体

    • 我所负责的项目是masonry与xib共存
    • 在我自定义view的时候,使用masonry给控件设置约束的时候想一次性设置上、左、右,但又不想先设置底部
    • 所以就想着模仿系统CGSize那样子,自定义结构体满足自己的需求

    2、先来看看系统CGSize结构体

    struct CGSize {
        CGFloat width;
        CGFloat height;
    };
    typedef struct CG_BOXABLE CGSize CGSize;
    
    struct 结构体名{
            类型名 成员名1;
            类型名 成员名2;
            ... ...
            类型名 成员名n;
    };
    typedef struct CG_BOXABLE 给此结构体定义了一个别名
    
    • typedef 是为了输入时可以直接使用CGSize而不必再输入struct。
    • CG_BOXABLE 在CoreGraphics/CGBase.h中可以找到定义的方法,它可以允许将结构体进行快速打包,这样我们就可以使用@()快速地将它转换成NSValue了。

    3、接下来我们来看看CGSizeMake

    /* Make a size from `(width, height)'. */
    
    CG_INLINE CGSize CGSizeMake(CGFloat width, CGFloat height);
    
    • CG_INLINE 是系统的一个宏:# define CG_INLINE static inline,那么static inline有什么作用呢?
      1. static inline一种宏定义语法,区别于define一般用来预编译常量,static inline一般用来预编译函数。
      2. static表示在当前文件中应用,如 static A, 在其它文件中也可以出现static A.不会导致重名的错误.
      3. inline内联函数,编译器在调用一个内联函数时,会首先检查它的参数的类型,保证调用正确。然后进行一系列的相关检查,就像对待任何一个真正的函数一样。这样就消除了它的隐患和局限性。

    4、自定义结构体

    设置占位Label的位置结构体,跟系统的基本保持一致

    struct
    LAPlacehoderTLR {
        CGFloat top;
        CGFloat left;
        CGFloat right;
    };
    typedef struct CG_BOXABLE LAPlacehoderTLR LAPlacehoderTLR;
    
    CG_INLINE LAPlacehoderTLR
    LAPlacehoderTLRMake(CGFloat top, CGFloat left, CGFloat right)
    {
        LAPlacehoderTLR placehoderTLR;
        placehoderTLR.top = top;
        placehoderTLR.left = left;
        placehoderTLR.right = right;
        return placehoderTLR;
    };
    

    4、如何使用

    定义属性

    @property (nonatomic, assign) LAPlacehoderTLR tlr;
    

    使用set方法就可以使用赋值了

    - (void)setTlr:(LAPlacehoderTLR)tlr {
        _tlr = tlr;
        [self.placehoderLabel mas_updateConstraints:^(MASConstraintMaker *make) {
            make.top.mas_equalTo(tlr.top);
            make.left.mas_equalTo(tlr.left);
            make.right.mas_equalTo(tlr.right);
        }];
    }
    

    参考资料

    1、https://www.jianshu.com/p/80150f88a61b
    2、https://www.jianshu.com/p/d557b0831c6a

    相关文章

      网友评论

          本文标题:关于自定义结构体

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