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相关推荐

  1. 关于Swift中Struct,Class和Enum的哪些事儿

    前言 Swift type System Swift是强类型的,尽管只有六种类型. 命名类型: protocol, class , struct , enum 复合类型:tuple, function ...

  2. 在Swift中如何使用C中的Struct

    swift 无法直接访问 c 语言的Struct.只能通过指针的方式访问. ///-----例子1开始------- The c Lib API : mycapi.h <code style=& ...

  3. Swift 中枚举、结构体、类(enum、struct、class)

    Swift 中枚举.结构体.类(enum.struct.class) Swift中的枚举与OC相比不会自动分配初始值,值的类型不会限定为整数,可以给定关联值类型和具体值(整型.浮点型.字符型(Swif ...

  4. Swift中Class和Struct异同

    Swift 中类和结构体有很多共同点.共同处在于: 定义属性用于存储值 定义方法用于提供功能 定义下标操作使得可以通过下标语法来访问实例所包含的值 定义构造器用于生成初始化值 通过扩展以增加默认实现的 ...

  5. Swift中编写单例的正确方式

    本文由CocoaChina译者leon(社区ID)翻译自krakendev 原文:THE RIGHT WAY TO WRITE A SINGLETON 转载请保持所有内容和链接的完整性. 在之前的帖子 ...

  6. Swift中依赖注入的解耦策略

    原文地址:Dependency Injection Strategies in Swift 简书地址:Swift中依赖注入的解耦策略 今天我们将深入研究Swift中的依赖注入,这是软件开发中最重要的技 ...

  7. 在 Swift 中使用闭包实现懒加载

    本文讲的是在 Swift 中使用闭包实现懒加载, 原文地址:Swift Lazy Initialization with Closures 原文作者:Bob Lee 译文出自:掘金翻译计划 译者:ls ...

  8. Swift中的选项集合

    Swift3中的选项集合(Option Set) 作者:Ole Begemann,原文链接,原文日期:2016/09/28 译者:Lanford3_3:校对:saitjr:定稿:CMB 选项集合在OC ...

  9. Swift中的全局常量文件

    本文翻译自:Global constants file in Swift In my Objective-C projects I often use a global constants file ...

最新文章

  1. 剑指offer(12)
  2. npm使用taobao镜像
  3. Codeforces Round 496
  4. WEB 开发异常:java.lang.ClassNotFoundException
  5. 对于algorithm102的总结
  6. Atitit 提升战力眼光和组织能力的几大要点 目录 1. 成长金字塔模型 德雷福斯模型 1 2. 提升战略眼光, 3 2.1. 视野与格局 3 2.2. 未来预测 未来发展负责,判断未来趋势, 3
  7. 月入1W+的自媒体达人都会用到的运营工具
  8. 蚂蚁金服Java岗内推,quartz定时器的处理
  9. mysql全文索引与停止词
  10. CAN总线网络知识(一)
  11. 夜天之书 #49 开源软件的技术写作
  12. 电脑的文件怎么备份至D盘?有一键备份的方式吗?
  13. php商城后台管理,商城后台管理系统
  14. c语言实现调和平均数
  15. Janis ST-500 系列探针台
  16. apache安装错误error: APR notfound解决办法
  17. Paper reading (九十四):Genomic and epidemiological evidence of bacterial transmission from probiotic
  18. 量化股票是什么意思?
  19. 51单片机毕业设计选题方向
  20. NOIP2004初赛普及组-C++

热门文章

  1. Sublime Text3配置Node.js开发环境
  2. PL/SQL第五章 Order by排序
  3. OpenGL概念辨析: 窗口,视口,裁剪区域
  4. 使用SDL打造游戏世界之入门篇 - 1
  5. CentOS下安装NetBeans集成开发环境
  6. 配置MySQL主从复制
  7. .NET2.0隐形的翅膀,正则表达式搜魂者【月儿原创】
  8. c#如何取自身应用程序文件名和路径?
  9. Windows下创建进程简介
  10. 循环神经网络(RNN)简介