Swift基础(五):类和结构体

来源:互联网 发布:梁朝伟演技知乎 编辑:程序博客网 时间:2024/05/29 11:29

目录:

类和结构体初始化

类是引用类型

恒等运算符

指针

类和结构体的选择

字符串(String)、数组(Array)、和字典(Dictionary)类型的赋值与复制行为



//类和结构体初始化

struct ResolutionStruct//结构体

{

    var width = 0;

    var height = 0;

}

class ResolutionClass//

{

    var width = 0;

    var height = 0;

}



let vgaStruct = ResolutionStruct(width:640, height:480);//结构体初始化赋值

let vgaClass = ResolutionClass();//类初始化赋值

vgaClass.height = 560;

vgaClass.width = 480;

//类是引用类型

//与值类型不同,引用类型在被赋予到一个变量、常量或者被传递到一个函数时,其值不会被拷贝。而是引用已存在的实例。

class VideoMode

{

    var interlaced = false;

    var frameRate = 0.0;

    var name: String?;

}

let tenEighty = VideoMode();

tenEighty.interlaced =true;

tenEighty.name = "1080i";

tenEighty.frameRate =25.0;


let alsoTenEighty =tenEighty;//alsoTenEighty引用tenEighty

alsoTenEighty.frameRate =30.0//改变alsoTenEighty的值,tenEighty的值一样改变

print("The frameRate property of tenEighty is now\(tenEighty.frameRate)");//输出:30.


//恒等运算符:三个等号"==="等价于,不等价于“!==”

var videoMode1 = VideoMode();

var videoMode2 = videoMode1;

if(videoMode1 ===videoMode2)

{

    print("等价于");

}


//指针


//类和结构体的选择

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

该数据结构的主要目的是用来封装少量相关简单数据值。

有理由预计该数据结构的实例在被赋值或传递时,封装的数据将会被拷贝而不是被引用。该数据结构中储存的值类型属性,也应该被拷贝,而不是被引用。

该数据结构不需要去继承另一个既有类型的属性或者行为。

举例来说,以下情境中适合使用结构体:

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

在所有其它案例中,定义一个类,生成一个它的实例,并通过引用来管理和传递。实际中,这意味着绝大部分的

自定义数据构造都应该是类,而非结构体。


//字符串(String)、数组(Array)、和字典(Dictionary)类型的赋值与复制行为

Swift 在幕后只在绝对必要时才执行实际的拷贝。Swift管理所有的值拷贝以确保性能最优化,所以你没必要去回避赋值来保证性能最优化。

















0 0
原创粉丝点击