您的位置:首页 > 移动开发 > Swift

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

2016-06-04 10:01 323 查看
目录:

类和结构体初始化

类是引用类型

恒等运算符

指针

类和结构体的选择
字符串(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
管理所有的值拷贝以确保性能最优化,所以你没必要去回
避赋值来保证性能最优化。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: