一起Talk IOS吧(第八回 OC中复合类型的代码演示)

本文通过代码示例介绍了Objective-C中的结构体(struct)和枚举(enum)的使用。讲解了结构体的typedef用法,强调了结构体赋值和比较的注意事项,以及枚举的定义和枚举常量的使用。文中还提到结构体和枚举在实际编程中的应用情况,指出枚举在iOS开发中尤其常见。最后,对结构体和枚举的关键知识点进行了总结。

看官们,我们在第三回中介绍了OC中的复合类型,有看官说介绍的不够详细,因此我使用图形的方式对所有基本类型做了总结,请参考以下图片中的内容。
在这里插入图片描述

看完类型的总结后,我们将通过具体的代码来演示如何使用这些类型。

  1 #import <Foundation/Foundation.h>
  2 struct Phone {
  3     int length;
  4     int width;
  5 };
  6 
  7 typedef struct _iphone {
  8     int length;
  9     int width;
 10 }IPhone;
 11 
 12 typedef enum _week{
 13     MON,
 14     TUR,
 15     WEN
 16 }Week;
 17 
 18 bool equal(IPhone a,IPhone b) {
 19     if(a.length == b.length && a.width == b.width)
 20         return YES;
 21     else
 22         return NO;
 23 }
 24 
 25 
 26 int main(){
 27 
 28     struct Phone p1;
 29     IPhone p2,p3;
 30     //enum Week w1,w2;
 31     Week w1,w2;
 32 
 33     p1.length = 3;
 34     p1.width = 6;
 35 
 36     p2.length = 2;
 37     p2.width = 4;
 38 
 39     p3.length = 2;
 40     p3.width = 4;
 41 
 42     w1 = MON;
 43     w2 = WEN;
 44 
 45     NSLog(@"size of p1: %i,%i",p1.length,p1.width);
 46     NSLog(@"size of p2: %i,%i",p2.length,p2.width);
 47 
 48     if(equal(p2,p3))
 49         NSLog(@"p2 == p3");
 50     else
 51         NSLog(@"p2 != p3");
 52 
 53     NSLog(@"w1: %i, w2: %i",w1,w2);
 54 }

编译上面的程序,并且运行,可以得到以下结果:

2020-10-30 21:38:15.539 ex.out[1742:88999] size of p1: 3,6
2020-10-30 21:38:15.539 ex.out[1742:88999] size of p2: 2,4
2020-10-30 21:38:15.539 ex.out[1742:88999] p2 == p3
2020-10-30 21:38:15.539 ex.out[1742:88999] w1: 0, w2: 2

首先介绍的是结构体,在代码中我们定义了两个结构体。表示手机(Phone和IPhone)类型,它们都有两个int类型的成员,不同之处在于一个是标准的结体体定义,另外一个使用了typedef关键字来重定义,在实际中这种用法更加多一些,因为在定义结构体变量的时候,不需要添加struct关键字,代码中的IPone类型就是这么做的。结构体在实际代码中使用比较少,因为OC提供了类这种复合类型,它比结构体更加强大,而且也是面向对象的基础,后面章回中我们会介绍类这种强大的类型。

结构体有两点需要注意的:

  • 1.结构体变量赋值时需要给结构体中每一个变量都赋值;
  • 2.结构体变量比较时和基本类型变量比较不同,不能简单地使用等号进行比较,需要比较结构体中的每一个成员,为此我们在代码中定义了equal函数,它用来比较IPhone类型的两个结构成员是否相等。

接着介绍一下枚举类型,枚举类型用来指定一些固定数量的数值,任何枚举类型变量的值,只能是这些固定值中的某一个。枚举类型的定义最好使用typedef关键字,原因和结构体定义时一样,我们刚刚介绍过。

接下来我们结合代码进行说明,代码中的位于大括号中的MON等数值就是刚才所说的”固
定数量的数值“,它们有自己的名字,也可以称其为枚举常量,它们的值从0开始,依次递增。当然这是默认的规则,也可以手动指定它们的值。我们在代码中定义了两个枚举类型变量,然后给它们赋值,并且通过NSLog打印出了它们的值,大家可以参考程序运行结果。

枚举在程序中使用的情况比较多,特别是IOS编程各种控件的属性值,几乎都是枚举,至于联合体,我们先不通代码演示了,因为实际情况中使用的非常少。

数组和指针是比较重要的复合类型,我们使用单独的章回进行介绍。其它的复合类型都与类相关,我们在面向对象的章回中再做介绍。

看官们,我们在本章回中通过代码演示了结构体和枚举这两种复合类型的用法,最后我们对文章中的知识做一个概述性总结:

  • 1.复合类型一共有七种,具体内容可以参考正文中的图片;
  • 2.结构体定义建议使用typedef,使用时有两点注意事项;
  • 3.枚举定义建议使用typedef,枚举变量只能使用枚举常量值,枚举常量值可以使用默认值,也可以手动指定值;
  • 4.结构体和联合体使用较少,重点掌握枚举的用法,可以参考代码进行练习;

看官们,欲知后事如何且听下回分解!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

talk_8

真诚赞赏,手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值