//类和结构体

import UIKit

//类和结构体

/*

1.枚举enum、结构体struct和String、Array、Dictionary类型,都属于值传递类型,被赋值给新的常量或变量时传递的是值的拷贝,若声明为常量实例,则不能修改它的属性的值,即使属性为变量

2.类class是引用类型,被赋值时传递的是实例的引用

一、类和结构体对比

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

定义属性用于存储值

定义方法用于提供功能

定义附属脚本用于访问值

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

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

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

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

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

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

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

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

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

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

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

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

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

*/

//结构体、类的定义

struct Resolution {

var width = 0

var height = 0

var filename = "data.txt"

}

class VideoMode {

lazy var 延迟属性 = Resolution()        //在实例初始化时未创建,只有在被调用时才创建

var resolution = Resolution()

var interlaced = false

var frameRate = 0.0

var name:String?

}

let someresolution = Resolution()

let somevideomode = VideoMode()    //实例的属性值均为默认值

let vga = Resolution(width: 1024, height: 768, filename:"file.txt")  //构造体类型有成员逐一构造器,用于初始化新实例中的属性值,而类实例无默认的成员逐一构造器!

//vga.width = 768  构造体类型的常量实例不能修改其任何属性的值

var hd = vga    //hd的值为vga的值的拷贝,改变hd的值与vga无关,他们是不同的结构体实例

hd.width = 1920

print("hd=\(hd.width)  vga=\(vga.width)")

let one = somevideomode    //类的常量实例的属性可以更改,因为更改的是所引用的实例的属性的值,而非引用本身

one.resolution = hd

one.interlaced = true

one.frameRate = 25.0

one.name = "1920i"

let two = one

two.resolution.width = 2880  //可以访问实例属性的子属性

if two === one {               //(===,!== 等阶于,不等阶于,one和two引用同一实例)

print("one的子属性width值=\(one.resolution.width)  two的子属性width值=\(two.resolution.width)")

print("开始调用文件:\(two.延迟属性.filename)")   //延迟属性:在实例初始化时未创建,只有在被调用时才创建,(前面加“lazy”关键字)

}

swift学习笔记之-类和结构体的更多相关文章

  1. swift学习笔记3——类、结构体、枚举

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

  2. Swift学习笔记(11)--类与结构体

    类与结构是编程人员在代码中会经常用到的代码块.在类与结构中可以像定义常量,变量和函数一样,定义相关的属性和方法以此来实现各种功能. 和其它的编程语言不太相同的是,Swift不需要单独创建接口或者实现文 ...

  3. 【Swift】学习笔记(八)——类和结构体

    1.类和结构体的定义 <pre name="code" class="html">struct Resolution { var width = 0 ...

  4. 【c# 学习笔记】类与结构体的区别

    由于类与结构体在语法和使用上都非常类似,导致我们这些初学者容易混淆.为更好理解,特做以下区分记录: ① 语法上的区别在于,定义类要使用关键词class,而定义结构体则使用关键词struct. ② 结构 ...

  5. Swift学习笔记:类和结构

    一.类和结构的异同 类和结构有一些相似的地方.它们都能够: 1. 定义一些能够赋值的属性: 2. 定义具有功能性的方法 3. 定义下标.使用下标语法 4. 定义初始化方法来设置初始状态 5. 在原实现 ...

  6. 【Swift学习】Swift编程之旅---类和结构体(十三)

    与其他编程语言所不同的是,Swift 并不要求你为自定义类和结构去创建独立的接口和实现文件.你所要做的是在一个单一文件中定义一个类或者结构体,系统将会自动生成面向其它代码的外部接口. 注意:通常一个类 ...

  7. Bash脚本编程学习笔记07:循环结构体

    本篇中涉及到算术运算,使用了$[]这种我未在官方手册中见到的用法,但是确实可用的,在此前的博文<Bash脚本编程学习笔记03:算术运算>中我有说明不要使用,不过自己忘记了.大家还是尽量使用 ...

  8. Bash脚本编程学习笔记06:条件结构体

    简介 在bash脚本编程中,条件结构体使用if语句和case语句两种句式. if语句 单分支if语句 if TEST; then CMD fi TEST:条件判断,多数情况下可使用test命令来实现, ...

  9. Go语言学习笔记(四)结构体struct & 接口Interface & 反射

    加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 结构体struct struct 用来自定义复杂数据结构,可以包含多个字段(属性),可以嵌套: go中的struc ...

随机推荐

  1. 寻找表达式(dfs)

    题目来源:微策略2013年校园招聘笔试题 题目描述: 现在有一个序列123......N,其中N介于3和15之间,要求在序列之间加入+.-或者空格,使得该序列组成的数学表达式的运算结果为0. 输入: ...

  2. ASP.NET 5中的那些K

    ASP.NET 5最大的变化是什么?首当其冲的就是多了很多K,K表示的是ASP.NET vNext的项目代号“Project K”,但很容易让人想到一个汉字——“坑”,希望K不要成为“坑”的缩写. K ...

  3. CAD2015安装教程 AutoCAD2015中文版安装激活图文教程

    28年来,Autodesk一直在坚持不懈地帮助客户提高设计流程效率.AutoCAD提供了可靠的三维自由形状设计工具以及强大的绘图和文档制作功能,在全球拥有数百万用户. autocad2015具有广泛的 ...

  4. HTML5第二节

    第二回合:HTML5的新特性 与之前的HTML4.01相比,HTML5增加了非常多的改变: ① 新的语义元素:<article>.<aside>.<figure>. ...

  5. 各种排序算法的分析及java实现

    排序一直以来都是让我很头疼的事,以前上<数据结构>打酱油去了,整个学期下来才勉强能写出个冒泡排序.由于下半年要准备工作了,也知道排序算法的重要性(据说是面试必问的知识点),所以又花了点时间 ...

  6. 材价看板(2)- 运行两周的kanban,改进的起点

    改进从何谈起?必须找到起点,那起点从哪来? 看板不需要像Scrum那样改变以往工作角色,简单通过任务上墙,配合敏捷的设计就能通过显示化日常工作来让问题自己蹦出来.在任何一个新采用看板的研发团队,执行一 ...

  7. html中获取图片的真实尺寸

    使用js得到图片的真实尺寸,下面就是js代码: <html> <head> <script type="text/javascript" src=&q ...

  8. excel日期格式转换为文本格式

    今天测试读取excel并修改数据库数据的时候遇到几个小问题. 1.空指针,读写io异常蛮多的,获取不到的数据就是null 2.读取文件位置,开始找不到文件 3.读取日期格式结果是一个数值,因此需要转化 ...

  9. CSS魔法堂:Reset CSS

    下列样式规则可用于最小化各浏览器标签样式的不一致性.注意:实际使用时应该对其进行适当的调整,以适应项目要求. /* http://meyerweb.com/eric/tools/css/reset/ ...

  10. 基于C#的MongoDB数据库开发应用(3)--MongoDB数据库的C#开发之异步接口

    在前面的系列博客中,我曾经介绍过,MongoDB数据库的C#驱动已经全面支持异步的处理接口,并且接口的定义几乎是重写了.本篇主要介绍MongoDB数据库的C#驱动的最新接口使用,介绍基于新接口如何实现 ...