Swift 中的值类型和引用类型

原创 2015年07月06日 16:39:02

值类型和引用类型只在之前的面试过程中碰到过,最近学习过程中,在体验 swift 的面向对象特性的时候,在 struct 和 class 中再次碰到了这个问题,说一说自己的收获吧。


值类型和引用类型在 OC 里面理解起来应该更方便。在 OC 中,我们实例化对象的时候有两种方式。一种是需要在变量名前面加个*(指针),一种是直接进行生命。第一种是引用对象,第二种是值类型。从声明方式我们也就知道了值类型和引用了类型的区别:值类型在赋值或者函数传递参数的时候,是创建了一个copy,副本传过去,函数在调用的过程中并不会影响原始数据;引用类型则是利用指针将数据本身传递过去了,所以会影响原数据。

值类型包括:整型、浮点型、布尔型、字符串、元组、集合和枚举。

引用类型包括:类!类!类!(重要的事情要说三遍)


这里代码会在图中所示处报错,错误的意思是你不能给 dept.name赋值,也就是由于 dept 是结构体,是值类型,所以即使函数在这里改变了name 值,也并不会改变结构体中的 name 的值,那怎么操作呢,这里需要用到 swift 形参的一种传递方法 in-out 传参。利用 inout 关键字定义一个 in-out 形参,这里函数会改变这个值,形成一个副本,并且用这个副本去替换原来的变量。



Reference:Swift 开发指南 关东升 2014 人民邮电出版社

相关文章推荐

iOS: 学习笔记, 值与引用类型(译自: https://developer.apple.com/swift/blog/ Aug 15, 2014 Value and Reference Type

值和引用类型 Value and Reference Types 在Swift中,有两种数据类型. 一是"值类型"(value type), 它是每一个实例都保存有各自的数据,通常定义为struct...

Swift-闭包是引用类型

闭包是引用类型//下面是一个使用makeIncrementor的例子let incrementByTen = makeIncrementor(forIncrement: 10)incrementByT...

初窥Swift-01-(基本输出,值类型,字典,数组)

swift出来那么久了,不属于狂热分子,今天才开始看看传说中的swift。本人代码经验很一般,但接触过的语言不少:c-java-c#-js-c++-html-css-oc等等吧,对Apple的东西的印...

第一节 Swift 简单的值类型(变量和常量)

本文la 使用let来定义常量,使用var来定义变量。常量的值在编译时不需要知道,但是你必须明确的给你赋一次值。这就意味着你使用常量给某个值命名,一旦赋值之后就可以到处使用了。   常量...

Objective C转Swift注意事项(二)值类型和协议

来自Leo的原创博客,转载请著名出处我的StackOverflow我的Github https://github.com/LeoMobileDeveloper注意:本文的代码是用Swift 2.2写...

[Swift] 快速预览及解释 (二 简单值类型)

2. Simple values 1) Use let to make a constant andvar to make a variable 2) A constant or variable...

Swift 学习笔记 [1] 类型 值 集合 函数 闭包

这里只放了一些我觉得和其他语言不一样,以及我想加深的内容。仅仅做个学习补充,如果发现有的东西你完全没概念,就该去查看官方文档。 类型 值 集合 函数 闭包...

swift学习笔记之函数形参,返回值以及函数类型

1、函数形参1.1 函数形参名(此处只讨论带参函数)函数参数都有一个外部参数名和一个本地参数名。外部参数名用来标记传递给函数调用的参数,本地参数名在实现函数的时候使用。 一般情况下,第一个参数省...

swift学习3 数据类型的可选值 optional type

swift不仅要求类型安全,还尽力保证数据安全,未赋值的变量不允许使用那么如果一开始不想赋值,就需要可选值定义,在类型后加问号?输出值为 nil,这里的nil与oc中的有所区别,但基本概念都是空值但是...

Swift-枚举类型以及原始值,与Switch匹配

1、在swift中的枚举类型如下: Swift中的枚举比OC中的枚举强大, 因为Swift中的枚举是一等类型, 它可以像类和结构体一样增加属性和方法 enum Method{ case...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Swift 中的值类型和引用类型
举报原因:
原因补充:

(最多只允许输入30个字)