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中结构体真是很好用,但是对性能什么的会不会造成什么大的影响这还没研究,应该是不会吧,我看在官方的文档中也用了很多结构体,有兴趣的小伙伴我们可以一起交流交流。

相关文章

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

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

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

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

  • iOS自定义结构体

    一、提要 通过以官方的CGSize为例,自定义Objective-C中的结构体,并使用。 二、CGSize 1、定...

  • Learn Golang In Day 9

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

  • C++ 结构体

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

  • solidity基础(3)

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

  • C语言--结构体

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

  • 结构体

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

  • iOS结构体

    iOS结构体 1.结构体的创建 struct name { int age; int phone; } 初始...

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

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

网友评论

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

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