Swift学习笔记-结构体,类和协议

class 和 struct

Swift 中的类和结构体很相像,他们共有了很多功能。最大的区别在于 struct 是值类型而 class 是引用类型。

class 和 struct 都能做的:

  • 可以拥有属性来存储数据。
  • 可以定义方法。
  • 可以使用下标来访问内容。
  • 可以使用构造器来初始化。
  • 可以被扩展。
  • 可以遵守协议。

class 能做但 strcut 不能做的:

  • 可以使用析构器来释放持有的资源。
  • 可以继承自其他类。
  • 可以在运行时得知类实例的类型。
  • 类实例可以被多次引用。

所有的 class 实例都是引用类型数据而 struct 实例是值类型数据,也就是说 struct 实例在传递时会被复制。

struct(或 enum,protocol) 中的类型作用域方法/属性 需要使用 static 来声明,对应的 class 中使用 class 来声明。目前 class 中不允许类作用域的存储属性,如果要在 class 中使用类型作用域的存储属性,可以使用 static 来解决。

protocol

Swift 中的协议相比 Objective-C 中的协议更加的强大。Swift 2.1 之后,由于协议扩展(protocol extension)的出现使得 Protocol 更像是一个类头文件一样的存在。程序猿们可以利用面向协议编程来大展身手。苹果甚至建议,在可能的情况下尽量使用协议来替代类。具体的说明详见我的另一篇文章