美文网首页Swift4学习
Swift4-类和结构体

Swift4-类和结构体

作者: wingsrao | 来源:发表于2018-08-09 10:59 被阅读21次

    类和结构体

    1.Swift不需要你为自定义类和结构体创建独立的接口和实现文件。在 Swift 中,你在一个文件中定义一个类或者结构体, 则系统将会自动生成面向其他代码的外部接口。
    2.类与结构体的对比:
    在 Swift 中类和结构体有很多共同之处,它们都能:

    • 定义属性用来存储值;
    • 定义方法用于提供功能;
    • 定义下标脚本用来允许使用下标语法访问值;
    • 定义初始化器用于初始化状态;
    • 可以被扩展来默认所没有的功能;
    • 遵循协议来针对特定类型提供标准功能。

    类有而结构体没有的额外功能:

    • 继承允许一个类继承另一个类的特征;
    • 类型转换允许你在运行检查和解释一个类实例的类型;
    • 反初始化器允许一个类实例释放任何其所被分配的资源;
    • 引用计数允许不止一个对类实例的引用。

    3.结构体在你的代码中通过复制来传递,并且并不会使用引用计数。

    4.定义:无论你在何时定义了一个新的类或者结构体,实际上你定义了一个全新的 Swift 类型。

    class SomeClass {
         // class definition goes here
    }  
    struct SomeStructure {
        // structure definition goes here
    }
    

    5.初始化器语法最简单的是在类或结构体名字后面接一个空的圆括号,例如 Resolution()或者 VideoMode()。

    6.结构体类型的成员初始化器

    struct Resolution {
          var width = 0
          var height = 0 
      }
    let vga = Resolution(width: 640, height: 480)
    

    7.结构体和枚举是值类型
    值类型是一种当它被指定到常量或者变量,或者被传递给函数时会被拷贝的类型。
    Swift 中所有的结构体和枚举都是值类型,这意味着你所创建的任何结构体和枚举实例——和实例作为属性所包含的任意值类型——在代码传递中总是被拷贝的。

    8.类是引用类型
    相对于拷贝,这里使用的是同一个对现存实例的引用。

    9.有时候找出两个常量或者变量是否引用自同一个类实例非常有用,为了允许这样,Swift提供了两个特点运算符:

    • 相同于 ( ===),意味着两个类类型常量或者变量引用自相同的实例;
    • 不相同于( !==)

    10.按照通用准则,当符合以下一条或多条情形时应考虑创建一个结构体:

    • 结构体的主要目的是为了封装一些相关的简单数据值;
    • 当你在赋予或者传递结构实例时,有理由需要封装的数据值被拷贝而不是引用;
    • 任何存储在结构体中的属性是值类型,也将被拷贝而不是被引用;
    • 结构体不需要从一个已存在类型继承属性或者行为。

    11.字符串,数组和字典的赋值与拷贝行为
    Swift 的 String , Array 和 Dictionary类型是作为结构体来实现的,这意味着字符串,数组和字典在它们被赋值到一个新的常量或者变量,亦或者它们本身被传递到一个函数或方法中的时候,其实是传递了拷贝。

    12.在上述有关字符串,数组和字典“拷贝”的描述中。你在代码中所见到的行为好像总是拷贝。然而在后台 Swift 只有在需要这么做时才会实际去拷贝。Swift 能够管理所有的值的拷贝来确保最佳的性能,所有你也没必要为了保证最佳性能来避免赋值。

    相关文章

      网友评论

        本文标题:Swift4-类和结构体

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