Swift4 构造体, 属性, 索引
创建: 2018/02/19
完成: 2018/02/25
【任务表】TODO
构造体定义 | |
定义的概要 |
struct 型名 { ● 构造体是值型 |
构造体的初始值 |
默认构造函数: 所有属性都设定初始值的话可用 型名() // 例 Class Sample {...} 前提: 构造函数一个也没有的前提下才可用 |
全项目构造函数 |
所有属性都指定的构造函数 型名(所有属性参数) // 例 Class Sample {var a: Int; var b: Int} 前提: 构造函数一个也没有的前提下才可用 |
代入常数的结构体 |
代入常数的实例属性无法变更 值型 |
构造体的常数属性 |
初始化后不能改变值 直接有初始值的,全项目构造函数时候忽略常数属性 没有的只能用全项目构造函数(没有自定义构造函数时), 或者使用自定义构造函数 |
自定义构造函数 |
init(参数) { ● 直接获取属性,也可以明确用self来标明(self.属性名) ● 不是独立构造函数的话,先呼出self.init ● 自定义后默认构造函数和全项目构造函数都不可用了,想用要自定义 |
嵌套类型 | 内部的其他类型 |
类型的别名 | typealias 新名 = 旧名 |
方法 | |
实例方法的定义 | 和类里面的实例方法一样 |
变更构造体内容的方法(method) |
一般不用,官方推荐构造体一个一个新建 必须把构造体声明为var 改变自身属性的方法前加上mutating mutating func sample(...) { ... } |
静态方法 |
定义方法: 方法前加上static 呼出方法: 构造体类.静态方法 static func sample(...) -> ... { ... } // 定义 StructName.sample // 呼出 |
构造函数与方法 |
类和结构体的所有属性设定完以前不能调用实例方法 规避方法: ● 先设定所有属性(推荐) ● 把需要的方法写成静态方法(不推荐) ● 方法定义在构造体外部(不推荐) ● var的话,延迟型属性 |
构造体内部定义运算符 |
类和结构体相关的运算符定义在类/结构体内部 实现方法加上static self表示的不是实例,是类。self呼出的方法是静态方法 注意: 在函数内部的类/构造体不能自定义以及重载运算符 |
属性 | |
属性的种类 |
● 容纳型属性(实例属性, 静态属性都可以) ● 计算型属性(实例属性, 静态属性都可以) |
静态属性 |
前面加static 静态方法处可以直接获取(不需要类名.) 静态方法改变类/构造体的静态变量不用加mutating |
容纳型属性的初始值用式子来设定 |
容纳型属性可以用式子来初始化 var sample: Int = a + b //a, b已定义 ● 静态属性的初始化式子只在需要的时候被评价一次,后面不会重复评价 |
计算型属性 |
由获取与更新值的步骤构成, 使用时和容纳型变量没有区别 var 属性名: 类型 { ● get, set顺序无所谓 ● set可以省略 ● set的参数可以省略, 参数只要参数名, 省略时为newValue var sample: Int { ● 类/构造体内使用计算型变量时必须先初始化该实例 ● 可以用 += 相当于 sample.property = newValue + sample.property 调用2次get,2次set |
向函数的inout参数传递属性 |
可以传递容纳型属性, 可读写属性(带get和set) sample(&a.val, &b.val) ● 变量与容纳型属性传进去的是指针, 内部变化和外部变化同步 ● 计算型变量复制进去,所以在函数执行完成后结果复制回原位置, 只改变一次 |
计算型属性的特殊设定 |
● get改变自身的属性, 加mutating 这样的属性代入常数无法获取该属性 (Cannot use mutating getter on immutable value: 'myTest3_3_v2' is a 'let' constant) ● set不改变自身属性, 加 nonmutating 这样的构造体代入常数该属性也可以代入 |
全局范围的计算型属性的定义 | 全局范围也可以定义计算型属性 |
属性监听器(obsever) |
容纳型属性更新前后进行一些操作的机制 var 属性名: 类型 = 初始值 { // 初始值可以省略不设定 ● willSet的参数省略了则为 newValue ● didSet的参数省略了则为 oldValue ● didSet内部可以改变自己的值,但不会递归地呼出didSet ● 传入inout参数时是复制进去, 函数结束时结果来改变值。 也就是didSet只运行一次 |
索引(添字付け) | |
索引(subscript) |
对多个属性, 像数组一般获取的功能 ● 可用于一切, 读写与只可读等等也没有限制 subscript(参数) -> 类型 { ● 可以作为inout参数, &sample[10] ● set的参数默认为newValue |
索引的变更 |
● 参数类型,数量没有限制 subscript(a: Int, b: String, c: Bool) 通过多次元可以模拟多重数组 a[i][j] ● 参数不能设定默认值和inout ● 可以添加标签 subscript(index i: Int) ● 可以重载 ● 同构造体/类内部使用为self[参数] |
最新文章
- JSP实现在项目在网页上查询
- Python:dict用法
- PowerShell管理IIS(新建站点、应用程序池、应用程序、虚拟目录等)
- 使用CATransition实现页面的“从左向右” “从右向左”的动画
- 推荐一款自己的软件作品[豆约翰博客备份专家],新浪博客,QQ空间,CSDN,cnblogs博客备份,导出CHM,PDF(转载)
- IIS 配置好了,为什么网站打开一片空白?
- Python中__init__方法介绍
- Java基础概念1
- 实例讲解基于 React+Redux 的前端开发流程
- [HNOI2009]最小圈
- leetcode 169 Majority Element 冰山查询
- 非正则表达式检验邮箱格式是否合法(Java代码实现)
- ubuntu常用命令及操作,包括安装CUDA
- 记录一个nginx的配置
- Spark2.0学习(三)--------核心API
- FastJSON、Gson和Jackson性能对比
- php 常用$_SERVER变量列表
- eclipse中用maven创建web项目
- springboot jpa sql查询与传值
- SQL Server 2016 的JSON功能
热门文章
- java打开本地应用程序(调用cmd)---Runtime用法详解
- Windows Server 2003的一些优化设置 (转至网络)
- java开发面试大全刷题整理
- oracle 用户账户被锁处理
- OSChinaclient源代码学习(3)--轮询机制的实现
- 使用CEF类库处理HTTP请求
- 【转】ubuntu 下安装mongodb php 拓展的方法
- 一个Exchange 2010 的password不定期弹框的问题处理,希望对大家可以有所帮助。
- mysql查看所有存储过程,函数,视图,触发器,表,分页
- 解决SVN Cleanup时遇到错误信息:Cleanup failed to process the following paths:xxxxxxx Previous operation has not finished: run 'cleanup' if it was interrupted Please execute the 'Cleanup' command.