Swift Struct Class

21 篇文章 0 订阅

struct 字段
在大多数语言中 struct 字段被用来定义结构体,在swift 中也一样,被定义额结构体,但是swift中的struct更强大,突然发现在swift中Sting类其实是个结构体,甚至swift Foundation框架的SDK,诸如String,Array,Dictionary都是基于struct实现的。如图:
在这里插入图片描述
( ⊙ o ⊙ )是的你没看错,在String结构体中定义了**init()**方法,应该说这是与其他语言的结构体非常不同的地方了。但是,swift中的结构体struct 同样不支持继承多态。

在swift中,类型引用和值引用的区别在于,对于类型引用(class reference),将变量a赋值给变量b,即b = a,这样的赋值语句仅仅将b的指针与a的指针一样,指向同一块内存区域,此时改变b的值,a也会跟着改变;而对于值引用(value reference),赋值语句b = a处理的过程是开辟一个新的内存b,将a变量的内容拷贝后存放到内存b,这时a和b完全没有关系的两个变量,对b的改变不会影响到a,反之亦然

如下图所示:struct 定义的 benren 、gongsi两个结构体变量
可以看到值引用的具体表现
在这里插入图片描述

struct和class这两个基本层面的区别,体现了区别于Objective-C语言,swift语言带来了全新的天翻地覆的改变。

首先说第一点区别,从swift的更新和struct不断完善来看,苹果公司更加推荐使用struct来代替class,因为struct值引用和class类型引用这点区别,保证使用struct编码能写出更加安全可靠的代码。为什么这样说呢,class类型引用在赋值时是将变量指向了同一块内存地址,这在一个长时间的跨度上会带来一些意想不到的问题,试想一个简单的例子,viewControllerA持有一个NSMutableArray数组mutalbeArray,它包含100条user信息,此时将mutableArray赋值给viewControllerB,对于viewControllerB而言,它仅仅需要前10条user信息,所以它将mutableArray多余的信息删除了,这样一个脑残的操作导致了viewControllerA模块展示错误和潜在的逻辑错误。而使用struct值引用则不会出现这样的问题。

第二点区别,struct没有继承的功能,这是因为swift在本质上来说是面向协议(Protocol Oriented)的语言,struct没有也不需要继承的功能,为了实现某个功能,struct去服从并实现某个协议就即可,从一个较高的层次来看,struct+protocol是构成swift面向协议语言的两个基石。这一点不在本文讨论范围,不再赘述。

为什么要使用struct呢?总结就是struct可以保证代码更加安全可靠,以及struct+protocol更加切合swift面向协议编程的初衷。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值