美文网首页
Swift 值类型和引用类型

Swift 值类型和引用类型

作者: 独立开发者Lau | 来源:发表于2018-07-16 09:21 被阅读7次

一、值语义
Swift的基本类型(Array,Dictionary, Int, String等)都是用结构体实现的,都是值类型。一般应该尽量优先用struct实现数据建模,只有在需要的时候才用class。
如:
import Cocoa
var str = "Hello, playground"
var playgroundGreeting = str
playgroundGreeting += "!How are you today?"
str
改变playgroundGreeting的值,str的值不会发生改变。

二、引用语义
对于值语义,把实例赋给新常量或变量会产生一个副本,把值类型的实例作为参数传递给函数也一样;而引用类型实例的行为则不同,会对底层实例创建新的引用。

三、值类型常量和引用类型常量
声明为常量的值类型不能改变属性,即使属性在类型实现中是用var声明的也是一样。可把值类型的实例想象成标示一个整体的值,就像整数。
不能改变声明为常量的值类型实例的属性,但是可以改变声明为常量的引用类型实例的属性。

四、配合使用值类型和引用类型
可以在值类型内部使用引用类型,也可以在引用类型内部使用值类型。但是大部分情况下不要在值类型内部使用引用类型。若确实需要在结构体内部使用引用类型,最好使用不可变实例。

五、复制
Swift没有在语言层面提供深复制的支持,这意味着Swift中的复制就是浅复制。浅复制不会创建实例的不同副本,而是复制这个实例的引用。深复制会复制引用指向的目标,但是Swift没有提供执行深复制的方法,若需要,须自己编写。

六、相等与同一
理解了值类型和引用类型的区别,可以再看看相等和同一。相等是指两个实例就可见的特征来说具有一样的值,比如具有同样文本的两个String实例。同一则是指两个变量或常量是否指向内存中的同一个实例。
let x = 1
let y = 1
x == y
==相等运算符,Swift中所有的基本数据类型(String、Int、Float、Double、Array和Dictionary)都可检查相等性。
===同一运算符,可进行同一性检查。
两个常量或两个变量可能相等(具有相同的值)但不同一(指向给定类型的不同实例);反过来不成立:如果两个变量或常量指向内存中的同一个实例,那它们一定也相等。

相关文章

  • Swift值类型&引用类型

    Swift值类型&引用类型 前言 值类型和引用类型是Swift中两种数据存储方式,简单来说值类型就是直接存储的值,...

  • swift的值类型和引用类型

    swift的类型有哪些?   swift的类型分为值类型和引用类型两种。值类型在传递和赋值时将进行复制,而引用类型...

  • Swift使用(一)数据类型,常量、变量、元组

    Swift数据类型,常量、变量、元组 数据类型 Swift分为值类型和引用类型: 1、值类型分为枚举enum 和 ...

  • 值类型和引用类型

    // 值类型和引用类型 // Swift 中 Int, Bool,struct, enum 是值类型,甚至 Str...

  • Swift 关键词 -- struct/enum/mutatin

    struct struct 值引用 在swift中,类型引用和值引用的区别在于,对于类型引用(class refe...

  • swift的值类型和引用类型

    Swift 值类型和引用类型 值类型包括:所有基本类型:整型(Int),浮点型(float),布尔类型(Boole...

  • 笔记01 swift 基础语法

    swift 常见数据类型 包括 值类型和引用类型 值类型 包括 枚举 optional 结构体(Bool Int...

  • Class和Struct比较

    从类型上看,在Swift中,Class是引用类型,Struct是值类型。值类型在传递和赋值的时候进行深复制,而引用...

  • Note 3 Swift (1)

    Swift学习笔记 变量与常量 变量 常量 值类型与引用类型 值类型 引用类型 数组与字典 数组 字典

  • iOS Swift 值类型与引用类型使用区别

    值类型在传递和赋值时将进行复制,而引用类型只会使用引用对象。Swift中定义的很多类型都是值类型,如struct、...

网友评论

      本文标题:Swift 值类型和引用类型

      本文链接:https://www.haomeiwen.com/subject/dhadsftx.html