【Swift】学习笔记(八)——类和结构体
1、类和结构体的定义
<pre name="code" class="html">struct Resolution {
var width = 0
var height = 0
}
class VideoMode {
var resolution = Resolution()
var interlaced = false
var frameRate = 0.0
var name: String? //值为可选String类型的name
}
类:keywordclass, struct:结构体
2、创建类和结构体的实例(其它语言中称实例为对象。)
let someResolution = Resolution()
let someVideoMode = VideoMode()
咦,非常easy啊,怎么没有keywordnew呢。。
。
。
和将函数赋值给变量是一样的啊。是的。
就这么简单。无需keyword。
3、结构体有一个逐属性构造器,类木有。
let vga = Resolution(width:640, height: 480)
4、使用. 点 来訪问属性,包含訪问和赋值。
someVideoMode.resolution.width = 1280
5、结构体是值类型,类是引用类型。
6、类的恒等运算符 等价于(===),不等价于(!==)推断两个变量或常量是否引用了同一个实例
7、指针无需特定的(*)来表示是一个内存地址引用,也不须要特定的符号(->)来訪问。它和訪问属性是一样的 用 (.)点。
8、类和结构体的差别
Swift 中类和结构体有非常多共同点。共同处在于:
- 定义属性用于存储值
- 定义方法用于提供功能
- 定义附属脚本用于訪问值
- 定义构造器用于生成初始化值
- 通过扩展以添加默认实现的功能
- 符合协议以对某类提供标准功能
与结构体相比,类还有例如以下的附加功能:
- 继承同意一个类继承还有一个类的特征
- 类型转换同意在执行时检查和解释一个类实例的类型
- 解构器同意一个类实例释放不论什么其所被分配的资源
- 引用计数同意对一个类的多次引用
9、类和结构体的选择
依照通用的准则。当符合一条或多条下面条件时,请考虑构建结构体:
- 结构体的主要目的是用来封装少量相关简单数据值。
- 有理由估计一个结构体实例在赋值或传递时,封装的数据将会被拷贝而不是被引用。
- 不论什么在结构体中储存的值类型属性,也将会被拷贝,而不是被引用。
- 结构体不须要去继承还有一个已存在类型的属性或者行为。
合适的结构体候选者包含:
- 几何形状的大小。封装一个
width
属性和height
属性,两者均为Double
类型。 - 一定范围内的路径,封装一个
start
属性和length
属性,两者均为Int
类型。 - 三维坐标系内一点,封装
x
,y
和z
属性。三者均为Double
类型。
在全部其他案例中,定义一个类。生成一个它的实例,并通过引用来管理和传递。实际中,这意味着绝大部分的自己定义数据构造都应该是类,而非结构体。
【Swift】学习笔记(八)——类和结构体的更多相关文章
- swift学习笔记3——类、结构体、枚举
之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
- swift学习笔记之-类和结构体
//类和结构体 import UIKit //类和结构体 /* 1.枚举enum.结构体struct和String.Array.Dictionary类型,都属于值传递类型,被赋值给新的常量或变量时传递 ...
- Swift学习笔记(11)--类与结构体
类与结构是编程人员在代码中会经常用到的代码块.在类与结构中可以像定义常量,变量和函数一样,定义相关的属性和方法以此来实现各种功能. 和其它的编程语言不太相同的是,Swift不需要单独创建接口或者实现文 ...
- 【c# 学习笔记】类与结构体的区别
由于类与结构体在语法和使用上都非常类似,导致我们这些初学者容易混淆.为更好理解,特做以下区分记录: ① 语法上的区别在于,定义类要使用关键词class,而定义结构体则使用关键词struct. ② 结构 ...
- Swift学习笔记:类和结构
一.类和结构的异同 类和结构有一些相似的地方.它们都能够: 1. 定义一些能够赋值的属性: 2. 定义具有功能性的方法 3. 定义下标.使用下标语法 4. 定义初始化方法来设置初始状态 5. 在原实现 ...
- 【Swift学习】Swift编程之旅---类和结构体(十三)
与其他编程语言所不同的是,Swift 并不要求你为自定义类和结构去创建独立的接口和实现文件.你所要做的是在一个单一文件中定义一个类或者结构体,系统将会自动生成面向其它代码的外部接口. 注意:通常一个类 ...
- Bash脚本编程学习笔记07:循环结构体
本篇中涉及到算术运算,使用了$[]这种我未在官方手册中见到的用法,但是确实可用的,在此前的博文<Bash脚本编程学习笔记03:算术运算>中我有说明不要使用,不过自己忘记了.大家还是尽量使用 ...
- Bash脚本编程学习笔记06:条件结构体
简介 在bash脚本编程中,条件结构体使用if语句和case语句两种句式. if语句 单分支if语句 if TEST; then CMD fi TEST:条件判断,多数情况下可使用test命令来实现, ...
- Go语言学习笔记(四)结构体struct & 接口Interface & 反射
加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 结构体struct struct 用来自定义复杂数据结构,可以包含多个字段(属性),可以嵌套: go中的struc ...
随机推荐
- windows系统下的redis启动教程
下载解压后配置redis.conf文件配置端口号和密码,打开poweshell命令,进入redis解压目录,使用.\redis-server.exe redis.conf 命令启动redis服务,再打 ...
- PHP7中session_start 使用注意事项,会导致浏览器刷时页面数据不更新
//PHP7中session_start 使用注意事项, session_start([ 'cache_limiter' => 'private', //在读取完毕会话数据之后马上关闭会话存储文 ...
- SDK_组合框的使用
组合框的使用 组合框的创建:有三种风格,分别 Simaple,Dropdown(可输入), 下拉列表(不可输入) 可以通过可视化编程中下拉列表的 下拉箭头 设置列表的长度 如何向组合框控件中添加数据, ...
- R函数详解
字符串连接函数paste 1.字符串连接:paste(..., sep = " ", collapse = NULL)sep表示分隔符,默认为空格.collapse表示如果不指定值 ...
- TCP端口状态LISTENING ESTABLISHED CLOSE_WAIT TIME_WAIT SYN_SENT
TCP状态转移要点 TCP协议规定,对于已经建立的连接,网络双方要进行四次握手才能成功断开连接,如果缺少了其中某个步骤,将会使连接处于假死状态,连接本身占用的资源不 会被释放.网络服务器程序要同时管理 ...
- JSONP 应用
受限于浏览器的同源安全策略, js 无法发起跨域的请求. 但是 HTML 中的 <script> 标签却可以引入跨域的文件使用. 而 JSONP 就是利用 <script> 的 ...
- Tomcat服务器启动后访问localhost:8080显示404的原因
原因:在eclipse中关联了Tomcat服务器 重点来了,如果你是在eclipse中点击启动按钮启动的Tomcat 那么Tomcat不会默认部署它自己的测试项目(也就是大猫localhost:808 ...
- 1289大鱼吃小鱼(STL中栈的应用)
>>点击进入测试<< 有N条鱼每条鱼的位置及大小均不同,他们沿着X轴游动,有的向左,有的向右.游动的速度是一样的,两条鱼相遇大鱼会吃掉小鱼.从左到右给出每条鱼的大小和游动的方向 ...
- 充当别的mcu的外部存储器(51类)
// 锁存地址 - STC12C5A60S2 reg [15:0]rAddr_51; //存放51单片机传过来的地址 读51地址寄存器 always @ (posedge MCLKout or neg ...
- ansible roles例子
#理解 changed_when failed_when become become_user ansible_become ansible_become_user static #检查group_v ...