美文网首页
swift学习三(类与结构体)

swift学习三(类与结构体)

作者: Taureau_2d81 | 来源:发表于2017-06-11 21:04 被阅读0次

一、类和结构体对比

二、结构体和枚举是值类型

三、类是引用类型

四、类和结构体的选择

五、字符串、数组、和字典类型的赋值与复制行为

一、类和结构体对比

Swift 中类和结构体有很多共同点。共同处在于:

定义属性用于存储值

定义方法用于提供功能

定义下标操作使得可以通过下标语法来访问实例所包含的值

定义构造器用于生成初始化值

通过扩展以增加默认实现的功能

实现协议以提供某种标准功能

与结构体相比,类还有如下的附加功能:

继承允许一个类继承另一个类的特征

类型转换允许在运行时检查和解释一个类实例的类型

析构器允许一个类实例释放任何其所被分配的资源

引用计数允许对一个类的多次引用

定义语法

我们通过关键字class和struct来分别表示类和结构体,并在一对大括号中定义它们的具体内容:

class SomeClass {

// 在这里定义类

}

struct SomeStructure {

// 在这里定义结构体

}

以下是定义结构体和定义类的示例:

struct Resolution {

var width = 0

var height = 0

}

class VideoMode {

var resolution = Resolution()

var interlaced = false

var frameRate = 0.0

var name: String?

}

类和结构体实例

生成结构体和类实例的语法非常相似:

let someResolution = Resolution()

let someVideoMode = VideoMode()

二、结构体和枚举是值类型

值类型 被赋予给一个变量、常量或者被传递给一个函数的时候,其值会被拷贝。

在 Swift 中,所有的结构体和枚举类型都是值类型。这意味着它们的实例,以及实例中所包含的任何值类型属性,在代码中传递的时候都会被复制。

类是引用类型

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

类和结构体的选择

在你的代码中,你可以使用类和结构体来定义你的自定义数据类型。

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

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

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

有理由预计该数据结构的实例在被赋值或传递时,封装的数据将会被拷贝而不是被引用。

该数据结构中   储存的值类型属性,也应该  被拷贝而不是  被引用。

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

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

几何形状的大小,封装一个width属性和height属性,两者均为Double类型。

一定范围内的路径,封装一个start属性和length属性,两者均为Int类型。

三维坐标系内一点,封装x,y和z属性,三者均为Double类型。

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

相关文章

  • Swift5.x-属性(中文文档)

    引言 继续学习Swift文档,从上一章节:结构体和类,我们学习了Swift结构体和类相关的内容,如结构体和类的定义...

  • swift4.0-11 类和结构体

    代码学习swift4.0, 类和结构体 //// main.swift// SwiftLearn11-类和结构...

  • 第九章 类和结构体

    c++中,结构体是稍有不同的类,类能做的,结构体也可以; 而swift中,结构体与类有较大区别, 结构体与类的区别...

  • swift学习三(类与结构体)

    一、类和结构体对比 二、结构体和枚举是值类型 三、类是引用类型 四、类和结构体的选择 五、字符串、数组、和字典类型...

  • Swift 结构体

    对 Swift 学习 的一些总结学习文献:Chris Eidhof. “Swift 进阶” 类与结构体的主要不同点...

  • Swift结构体内存初探之写时复制

    Swift赋予了结构体很多余类相同的特性,以至于Swift推荐在程序中使用结构体来存储结构化数据(关于类与...

  • Swift初探(二)

    继Swift初探之后,我们来继续学习下Swift里的结构体,类,协议,闭包 结构体 两种调用结构体的方法1.调用结...

  • iOS知识点-8.类(class)和结构体(struct)有什么

    Swift Basics 类(class)和结构体(struct)有什么区别? Swift中,类是引用类型,结构体...

  • Swift学习_基本语法之枚举&类&结构体

    1.枚举 类和结构体 在swift中类和结构体类似,可以把结构体理解成是一种轻量级的类,在swift中结构体不仅可...

  • Swift第2次小结

    内容来源 Swift 5.1 教程 结构体和类 Swift 并不要求你为自定义的结构体和类的接口与实现代码分别创建...

网友评论

      本文标题:swift学习三(类与结构体)

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