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

关于自定义结构体

作者: 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

相关文章

  • 以太坊(十六)Solidity数据类型-结构体

    自定义结构体 Person就是我们自定义的一个新的结构体类型,结构体里面可以存放任意类型的值。 初始化一个结构体 ...

  • Go 语言程序设计——面向对象编程(5)

    结构体 Go 语言中创建自定义结构体最简单的方式是基于 Go 语言的内置类型创建 自定义类型也可以基于结构体创建,...

  • Learn Golang In Day 9

    Learn Golang In Day 9 简介 结构体是自定义的数据结构 定义结构体 package main ...

  • 关于自定义结构体

    1、为什么我要自定义结构体 我所负责的项目是masonry与xib共存 在我自定义view的时候,使用masonr...

  • C++ 结构体

    结构体简介 结构体是拥护自定义的数据类型,允许用户储存不同的数据类型 语法:struct 结构体名{结构体成员列表...

  • solidity基础(3)

    solidity的自定义结构体深入详解结构体,solidity中的自定义类型,我们可以使用关键字struct来进行...

  • C语言--结构体

    用户可以使用结构体自定义自己的数据类型。 结构体定义和变量声明 struct用来定义结构体,结构体一般定义如下,其...

  • 结构体

    声明:结构体是一种自定义的数据类型 定义: struct 结构体名 变量名 = {初值}; 结构体成员访问: 匿名...

  • 【Golang】json自定义序列化的深入解析

    对于使用结构体中嵌套结构体的情况,只有receiver为指针类型,而嵌套结构体为结构体的值语义的时候不能触发自定义...

  • 结构体

    基本概念 结构体:属于用户自定义的数据类型,允许用户存储不同的数据类型。 定义和使用 结构体数组 结构体指针 结构...

网友评论

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

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