1-Swift中的Struct 和 Class
1 为什么swift 推荐使用struct类型
在swift中是推荐使用struct类型的,值类型的变量在赋值的时候会自动进行一次低消耗的值拷贝
对比与对象的拷贝更加高效且不存在线程安全问题。
2 Struct 的概述
Swift语言中非常重视结构体,把结构体作为实现面向对象的重要手段。
Swift的Foundation 框架中,String,Array,Dictionary都是基于Struct实现的。
3 Struct 和 Class的区别
类和结构体都非常的类似,都具有定义和使用属性,方法,下标,构造器邓面向对象的特性,但是结构体不具有继承性,也不具备运行时强制类型转换等功能。
Class 是引用类型 (Reference Type)
Struct 是值类型 (Value Type)
简单的赋值方式:
a=b;
对于引用类型来讲的话,将a和b的指针指向同一块内存区域,此时改变a的值也会改变b的值
对于值类型来讲的话,是开辟新的内存给a,a和b是没有关系的两个变量,改变b不会改变a
class 为类型引用 struct为值引用
class Person{var name:String?;init(name:String?) {self.name = name;}
}// 创建一个学生
var studentA = Person.init(name: "tom");
var studentB = studentA;studentB.name = "Alex";
// 都打印Alex
print(studentA.name as Any);
print(studentB.name as Any);struct Dog{var name:String?;init(name:String?) {self.name = name;}
}var d1 = Dog.init(name: "tom");
var d2 = d1;
d2.name = "Jerry";
// 则d1 和 d2 的打印值不同
print(d1.name as Any);
print(d2.name as Any);
Struct 没有继承功能 Class 有继承功能
Swift 本质上来讲是面向协议的语言,Struct没有也不需要继承的功能,为了实现某个功能,只需要遵守一个并实现一个协议即可,从一个较高的层次来讲struct+protocol
是构成swift面向协议语言的两个基石。
Struct 的特点
1 安全性 值类型传递,自动线程安全
2 内存,没有引用计数,不会因为循环引用从而导致内存泄漏
3 速度 值类型通常是以栈的形式分配的,而不是用堆,比class 要为快
4 方法中修改属性,需要添加mutating,而class 不需要
5 序列化,不支持序列化,可以用字节转为NSData,而class支持序列化
1-Swift中的Struct 和 Class相关推荐
- 关于Swift中Struct,Class和Enum的哪些事儿
前言 Swift type System Swift是强类型的,尽管只有六种类型. 命名类型: protocol, class , struct , enum 复合类型:tuple, function ...
- 在Swift中如何使用C中的Struct
swift 无法直接访问 c 语言的Struct.只能通过指针的方式访问. ///-----例子1开始------- The c Lib API : mycapi.h <code style=& ...
- Swift 中枚举、结构体、类(enum、struct、class)
Swift 中枚举.结构体.类(enum.struct.class) Swift中的枚举与OC相比不会自动分配初始值,值的类型不会限定为整数,可以给定关联值类型和具体值(整型.浮点型.字符型(Swif ...
- Swift中Class和Struct异同
Swift 中类和结构体有很多共同点.共同处在于: 定义属性用于存储值 定义方法用于提供功能 定义下标操作使得可以通过下标语法来访问实例所包含的值 定义构造器用于生成初始化值 通过扩展以增加默认实现的 ...
- Swift中编写单例的正确方式
本文由CocoaChina译者leon(社区ID)翻译自krakendev 原文:THE RIGHT WAY TO WRITE A SINGLETON 转载请保持所有内容和链接的完整性. 在之前的帖子 ...
- Swift中依赖注入的解耦策略
原文地址:Dependency Injection Strategies in Swift 简书地址:Swift中依赖注入的解耦策略 今天我们将深入研究Swift中的依赖注入,这是软件开发中最重要的技 ...
- 在 Swift 中使用闭包实现懒加载
本文讲的是在 Swift 中使用闭包实现懒加载, 原文地址:Swift Lazy Initialization with Closures 原文作者:Bob Lee 译文出自:掘金翻译计划 译者:ls ...
- Swift中的选项集合
Swift3中的选项集合(Option Set) 作者:Ole Begemann,原文链接,原文日期:2016/09/28 译者:Lanford3_3:校对:saitjr:定稿:CMB 选项集合在OC ...
- Swift中的全局常量文件
本文翻译自:Global constants file in Swift In my Objective-C projects I often use a global constants file ...
最新文章
- 剑指offer(12)
- npm使用taobao镜像
- Codeforces Round 496
- WEB 开发异常:java.lang.ClassNotFoundException
- 对于algorithm102的总结
- Atitit 提升战力眼光和组织能力的几大要点 目录 1. 成长金字塔模型 德雷福斯模型	1 2. 提升战略眼光,	3 2.1. 视野与格局	3 2.2. 未来预测 未来发展负责,判断未来趋势,	3
- 月入1W+的自媒体达人都会用到的运营工具
- 蚂蚁金服Java岗内推,quartz定时器的处理
- mysql全文索引与停止词
- CAN总线网络知识(一)
- 夜天之书 #49 开源软件的技术写作
- 电脑的文件怎么备份至D盘?有一键备份的方式吗?
- php商城后台管理,商城后台管理系统
- c语言实现调和平均数
- Janis ST-500 系列探针台
- apache安装错误error: APR notfound解决办法
- Paper reading (九十四):Genomic and epidemiological evidence of bacterial transmission from probiotic
- 量化股票是什么意思?
- 51单片机毕业设计选题方向
- NOIP2004初赛普及组-C++