文章内容来源于《Functional Programing in Swift》,详情请看原著

The Value of Immutability

swift 对于控制值改变有一些机制。在这章我们将解释这些机制工作的不同,区分值类型,引用类型,同时说为什么限制使用可变状态是一个好idea。

Variables and References 

在swift中,有两种方法来初始化一个变量,通过使用 var 或者let

var x:Int =
let y:Int =

var :变量 (mutable)            let: 常量(immutable variables)

Value Types vs. Reference Types 

我们都知道结构体是值类型,而类是引用类型,这一行为上的细微区别就造就了架构上的不一样

值类型的实例,不管是在赋值或是作为函数参数的时候,都是被复制的。Int,String,Array,Dictionary,tuple,emum ,struct都是值类型

引用类型的实例(主要是类,Any changes to this reference will also mutate the original object or instance. )可以有多个所有者。将一个引用赋值给一个新的变量或者传递给一个函数的时候, 他们都指向同一个实例。这是你熟悉的对象行为。

说白了,值类型就是完全拷贝,引用仅仅是传递了一个指针。

值类型能够使你构建非常清晰,简单,更容易测试的典型架构。

值类型与外部状态通常没有依赖或者只有很少的依赖,所以当你思考它们的时候,你只需要考虑很少的一部分。

值类型是内在可组合的和可重用的,因为它们是可交换的。

最后,一个值类型层允许你从应用程序稳定的业务逻辑中独立出活跃的行为元素。代码越稳定,你的系统会变得越容易测试和修改。

Structs and Classes: Mutable or Not? 

对于struct来说,如果申明为let,那么他的值是不可改变的。例如

let immutablePoint = PointStruct(x:0, y: 0)

immutablePoint = PointStruct(x:1, y: 1)  // 这个是产生err的

immutablePoint.x = 3  // 这也是不允许的

但如果你声明为var的话,immutablePoint.x = 3 ; 这完全是允许的

如果PointStruct的x,和y申明为let,name

immutablePoint.x = 3 // Rejected

但是,你可以将其赋值给新的结构体实体

immutablePoint = PointStruct(x:1, y: 1)  //这是允许的

最新文章

  1. C#将Json字符串反序列化成List对象类集合
  2. [SAP ABAP开发技术总结]面向对象OO
  3. linux tar 打包 压缩 解压
  4. hdu 2295 Radar 重复覆盖+二分
  5. js实现文本框或文本域在用户输入时(oninput)触发事件,操作元素
  6. 基于百度地图SDK和Elasticsearch GEO查询的地理围栏分析系统(3)-前端实现
  7. 怎么理解np.random.seed()?
  8. chrome下input文本框自动填充背景问题解决
  9. 6.19 noip模拟题(题目及解析转自 hzwer 2014-3-15 NOIP模拟赛)
  10. Spring异常之版本错误
  11. Ubuntu下基于Virtualenv构建Python开发环境
  12. Load data local infile 实验报告
  13. 启动fiddler导致浏览器无法上网的解决方法
  14. php设置cookie为httponly防止xss攻击
  15. fun = [lambda x: x*i for i in range(4)] 本质解析/原理,LEGB规则 闭包原理
  16. 牛客练习赛43 Tachibana Kanade Loves Probability(快速幂)
  17. linux 逆向映射机制浅析
  18. 使用spring boot +WebSocket实现(后台主动)消息推送
  19. 初探Java反射机制
  20. Python读写oracle数据库

热门文章

  1. TestNG简介与安装步骤
  2. Java子线程中的异常处理(通用)
  3. 实战系列之 Node.js 玩转 Java
  4. PowerBI开发 第七篇:数据集和数据刷新
  5. PBOC圈存时用到3DES加密解密以及MAC计算方法
  6. Asp.Net MVC4 系列-- 进阶篇之路由(1)
  7. [js高手之路]匀速运动与实例实战(侧边栏,淡入淡出)
  8. Jmeter脚本录制方法(二)——手工编写脚本(jmeter与fiddler结合使用)
  9. Echarts数据可视化series-line线图,开发全解+完美注释
  10. jQuery Mobile 所有data-*选项,开发全解+完美注释