//类和结构体

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. SQL Cookbook

    1.  利用LAG OVER抑制结果集中的重复值 原始结果如下: SQL> select deptno,ename from emp order by deptno; DEPTNO ENAME ...

  2. backbone库学习-View

    Backbone中的视图提供了一组处理DOM事件.和渲染模型(或集合)数据方法(在使用视图之前,你必须先导入jQuery或Zepto) 视图类提供的方法非常简单,我们一般在backbone.View的 ...

  3. Microservices Reference Architecture - with Spring Boot, Spring Cloud and Netflix OSS--转

    原文地址:https://www.linkedin.com/pulse/microservices-reference-architecture-spring-boot-cloud-anil-alle ...

  4. 自制jquery可编辑的下拉框

    昨天看到QQ登录的时候,可以选择以前登录过的账户,这个东西也可以在网站登录的时候用到,所以我就想做一个这样的插件:在网上查了很多,没有找到合适自己的,所以决定自动制作一个. 原理就是一个textbox ...

  5. Django快速开发之投票系统

    https://docs.djangoproject.com/en/1.8/intro/tutorial01/ 参考官网文档,创建投票系统. ================ Windows  7/1 ...

  6. Testing - 测试基础 - 分类

    对软件内部结构的深入程度 黑盒测试:又叫功能测试.数据驱动测试或基于需求规格说明书的功能测试. 白盒测试:又称结构测试.逻辑驱动测试或基于程序代码内部构成的测试. 灰盒测试:包含性能测试.自动化测试. ...

  7. Effeckt.css – CSS3 Transitions & Animations 精妙应用

    CSS3 不仅仅用作界面效果补充,还可以用来替换传统的一些界面实现,而且效果更酷.Effeckt.css 收集了众多精妙的 CSS3 Transitions & Animations 效果应用 ...

  8. Windows下Eclipse提交MR程序到HadoopCluster

    作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 欢迎转载,转载请注明出处. 以前Eclipse上写好的MapReduce项目经常是打好包上传到Hadoop测试集 ...

  9. Struts2 源码分析——项目分析

    项目知识点分析 从上一章中我们知道了接下来我们要去了解源码的项目(struts2-showcase).而这一章将讲述我三年后在次接触struts2-showcase项目是一个什么样子的情况.我有一个工 ...

  10. 基于HTML5的Drag and Drop生成图片Base64信息

    HTML5的Drag and Drop是很不错的功能,网上使用例子较多如 http://html5demos.com/drag ,但这些例子大部分没实际用途,本文将搞个有点使用价值的例子,通过Drag ...