zoukankan      html  css  js  c++  java
  • swift 值类型和引用类型

    值类型

    值类型被赋予给一个变量,常数或者本身被传递给一个函数的时候,实际上操作的是其的拷贝。
    在 Swift 中,所有的基本类型:
    整数(Integer)、浮点数(floating-point)、布尔值(Booleans)、字符串(string)、数组(array)和字典(dictionaries),都是值类型,
    并且都是以结构体的形式在后台所实现。
    在 Swift 中,所有的结构体和枚举都是值类型。这意味着它们的实例,以及实例中所包含的任何值类型属性,在代码中传递的时候都会被复制。

    集合(Collection)类型的赋值和拷贝行为

    Swift 中数组(Array)和字典(Dictionary)类型均以结构体的形式实现。
    然而当数组被赋予一个常量或变量,或被传递给一个函数或方法时,其拷贝行为与字典和其它结构体有些许不同。
    以下是对于数组,字典,字符串和其它值的拷贝的描述:

      在你的代码中,拷贝好像是确实是在有拷贝行为的地方产生过。  然而,在 Swift 的后台中,只有确有必要,实际(actual)拷贝才会被执行。
      Swift 管理所有的值拷贝以确保性能最优化的性能,  所以你也没有必要去避免赋值以保证最优性能。(实际赋值由系统管理优化)
    

    实际上我也不明白..就暂且当数组和字典在拷贝的时候是引用类型的

    引用类型

    引用类型在被赋予到一个变量、常量或者被传递到一个函数时,操作的是引用,其并不是拷贝。因此,引用的是已存在的实例本身而不是其拷贝。

    let tenEighty = VideoMode()
    tenEighty.resolution = hd
    tenEighty.interlaced = true
    tenEighty.name = "1080i"
    tenEighty.frameRate = 25.0
    
    let alsoTenEighty = tenEighty
    alsoTenEighty.frameRate = 30.0
    
    if tenEighty === alsoTenTighty {
        println("tenTighty and alsoTenEighty refer to the same Resolution instance.")
    }
    
    请注意“等价于"(用三个等号表示,===) 与“等于"(用两个等号表示,==)的不同:
    “等价于”表示两个类类型(class type)的常量或者变量引用同一个类实例。
    等于”表示两个实例的值“相等”或“相同”,判定时要遵照类设计者定义定义的评判标准,因此相比于“相等”,这是一种更加合适的叫法。

    类和结构体的选择

    然而,结构体实例总是通过值传递,类实例总是通过引用传递。这意味两者适用不同的任务。当你在考虑一个工程项目的数据构造和功能的时候,你需要决定每个数据构造是定义成类还是结构体。

    按照通用的准则,当符合一条或多条以下条件时,请考虑构建结构体:

    • 结构体的主要目的是用来封装少量相关简单数据值。
    • 有理由预计一个结构体实例在赋值或传递时,封装的数据将会被拷贝而不是被引用。
    • 任何在结构体中储存的值类型属性,也将会被拷贝,而不是被引用。
    • 结构体不需要去继承另一个已存在类型的属性或者行为。

    合适的结构体候选者包括:

    • 几何形状的大小,封装一个width属性和height属性,两者均为Double类型。
    • 一定范围内的路径,封装一个start属性和length属性,两者均为Int类型。
    • 三维坐标系内一点,封装xyz属性,三者均为Double类型。

    在所有其它案例中,定义一个类,生成一个它的实例,并通过引用来管理和传递。实际中,这意味着绝大部分的自定义数据构造都应该是类,而非结构体。

  • 相关阅读:
    关于renren vue项目的启动
    idea得破解
    activiti任意节点任务跳转
    activiti的网关(GateWay)
    activiti入门案例
    activiti基本介绍
    事务的传播机制
    设计模式之鸭子模式
    Python中的数据类型
    tp5 模板参数配置:tpl_replace_string
  • 原文地址:https://www.cnblogs.com/zhepama/p/3857306.html
Copyright © 2011-2022 走看看