Swift学习(八:类和结构体)

1.首先进行一下类和结构体的对比:
  • 共同点:
    定义属性用于存储值
    定义方法用于提供功能
    定义构造器用于生成初始化值
    通过扩展增加默认实现的功能
    实现协议提供某种标准功能

  • 类还有更多功能:
    允许继承
    引用计数允许对一个类的多次引用

2.实例化类和结构体语法
    class Some{}
    struct SomeStuct{}
3.
  • 结构体中属性的访问通过点语法。

  • 结构体都有一个自动生成的成员主意构造器。

  • 结构体和枚举是值类型,创建多个结构体对象事,是对值的复制,而不是指向相同实例

      struct SomeStru{
              var width= 0
              var height =0
      }
      let some = SomeStru()
      some.width = 10
    
      let one = some
      one.width = 20
      print("\(one.width).....\(some.width)")       //  20...10
    

在将some赋值给one时,实际上是将some里的值拷贝给了one,将拷贝的值存入新的SomeStru实例中。someone相互独立,不会影响互相的值。

  • 类是引用类型,在被赋值到一个变量或常量时,值不会被拷贝,引用的是已经存在的实例本身而不是值拷贝
4.恒等运算符:判断两个常量或变量是否引用同一个实例
  • 等价于===表示两个类类型(class type)的常量或者变量引用同一个类实例
  • 不等价于 !==表示两个实例的值“相等”或“相同”,判定时要遵照设计者定义的评判标准,因此相对于“相等”来说,这是一种更加合适的叫法。
5.类和结构体的选择

以下考虑结构体:

  • 该数据结构的主要目的是用来封装少量相关简单数据值。
  • 有理由预计该数据结构的实例在被赋值或传递时,封装的数据将会被拷贝而不是被引用。
  • 该数据结构中储存的值类型属性,也应该被拷贝,而不是被引用。
  • 该数据结构不需要去继承另一个既有类型的属性或者行为。
6.字符串(String)、数组(Array)、和字典(Dictionary)类型的赋值与复制行为
  • Swift 中,许多基本类型,诸如String,Array和Dictionary类型均以结构体的形式实现。这意味着被赋值给新的常量或变量,或者被传入函数或方法中时,它们的值会被拷贝。

  • Objective-C 中NSString,NSArray和NSDictionary类型均以类的形式实现,而并非结构体。它们在被赋值或者被传入函数或方法时,不会发生值拷贝,而是传递现有实例的引用。

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