• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Swift Struct Class

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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面向协议编程的初衷。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
《Swift编程语言教程》中文翻译及读书笔记page21发布时间:2022-07-14
下一篇:
使用Swift从头开始安装iOS:自动布局基础发布时间:2022-07-14
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap