Swift学习笔记-类和结构体

  • 结构体会自动生成逐一构造器
  • 枚举和结构体都是值类型,每次传递的时候都是拷贝。即后面的改变不影响之前的。
  • 两个类实例指向同一个地址用 === 判断(等价于)。
  • swift中数组,字典均为结构体,为值类型。

1.swift类和结构体有很多共同点:

  • 定义属性用于存储值
  • 定义方法用于提供功能
  • 定义下标操作使得可以通过下标语法来访问实例所包含的值
  • 定义构造器用于生成初始化值
  • 通过扩展以增加默认功能的实现
  • 实现协议已提供某种标准功能

与结构相比,类还有如下的附加功能:

  • 继承允许一个类继承另外一个类的特征
  • 类型转换允许在运行时检查和解释一个类实例的类型
  • 析构器允许一个类实例释放任何其所被分配的资源
    +引用计数允许对一个类的多次引用
    (结构体总是通过复制的方式在代码)

2.类和结构体的定义方式

struct Resolution {
    var width = 0
    var height = 0
}
class VideoMode {
    var resolution = Resolution()
    var interlaced = false
    var frameRate = 0.0
    var name: String?
}

生成类或者结构体的实例用(),通过这种方法所创建的类或者结构体实例,其属性均会被初始化为默认值。

let x = VideoMode()

3.属性访问

通过.语法可以访问实例的属性。

print(x.frameRate)

结构体都有一个自动生成的成员逐一构造器。类没有。

let x = Resolution(width: 20, height: 20)

4.结构体和枚举是值类型

在 Swift 中,所有的结构体和枚举类型都是值类型。这意味着它们的实例,以及实例中所包含的任何值类型属性,在代码中传递的时候都会被复制。

5.类是引用类型

let tenEighty = VideoMode()
let alsoTenEighty = tenEighty
alsoTenEighty.frameRate = 30.0

这里alsoTenEighty是let修饰的,但是仍然可以修改属性frameRate,因为alsoTenEighty常量的值没有改变,只是改变了alsoTenEighty引用的frameRate的值,而frameRate是var修饰的。

你可能感兴趣的:(Swift学习笔记-类和结构体)