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[参数] |
Swift4 构造体, 属性, 索引的更多相关文章
- CLR via C#(11)-无参属性、有参数属性(索引器)
一. 无参属性 1. 定义属性 无参属性就是我们最常见的属性方式,在赋值时可以加入一定的逻辑判断.属性的定义其实不复杂,先看个直观的例子: 说明: 属性要定义名称和类型,且类型不能是void. 属性是 ...
- ArcGIS Engine 创建索引(属性索引)——提高查询效率
转自原文 ArcGIS Engine 创建索引(属性索引)——提高查询效率 众所周知,建立索引可以提高查询的效率,当对FeatureClass中的某一列频繁的查找,且数据量比较大时,建立索引是非常有必 ...
- C#属性-索引器-里氏替换-多态-虚方法-抽象-接口-泛型-
1.属性 //属性的2种写法 public class person { private string _name; public string Name { get { return _name; ...
- IoC容器-Bean管理XML方式(创建对象和set注入属性,有参构造注入属性)
Ioc操作Bean管理 1,什么是Bean管理 (0)Bean管理指的是两个操作 (1)Spring创建对象 (2)Spring注入属性 2,Bean管理操作有两种方式 (1)基于xml配置文件方式实 ...
- model类的构造部分属性的对象 产生的json
在 action方法里, 产生一个对象,可能会是默认的全属性对象,那么在输出的 json就又所有 都出现了. 只是其他的属性全部是 null 那么 在 json里面配上 <!-- json 不产 ...
- go之构造体方法
package main import ( "fmt" "math" ) type Vertexs struct { X, Y float64 } //Abs ...
- matlab学习笔记12_3串联结构体,按属性创建含有元胞数组的结构体,filenames,isfield,isstruct,orderfields
一起来学matlab-matlab学习笔记12 12_3 结构体 串联结构体,按属性创建含有元胞数组的结构体,filenames,isfield,isstruct,orderfields 觉得有用的话 ...
- matlab学习笔记12_2创建结构体数组,访问标量结构体,访问非标量结构体数组的属性,访问嵌套结构体中的数据,访问非标量结构体数组中多个元素的字段
一起来学matlab-matlab学习笔记12 12_2 结构体 创建结构体数组,访问标量结构体,访问非标量结构体数组的属性,访问嵌套结构体中的数据,访问非标量结构体数组中多个元素的字段 觉得有用的话 ...
- MongoDB的学习--索引类型和属性(转)
原文链接:MongoDB的学习--索引类型和属性 索引类型 MongDB的索引分为以下几种类型:单键索引.复合索引.多键索引.地理空间索引.全文本索引和哈希索引 单键索引(Single Field I ...
随机推荐
- 【git】git分支的合并
原文: http://gitbook.liuhui998.com/3_3.html http://gitbook.liuhui998.com/5_3.html 一.如何分支的合并 在git中,可以使用 ...
- Solr Admin管理界面使用说明
Notice:本说明基于Solr6.4.2. 本文讨论的是如何使用Solr Admin UI. 一级菜单 图1.SolrCloud模式 图2.单机Solr模式 Logging:展示Solr的日志,不用 ...
- 出现 Assigning the return value of new by reference is deprecated in xxxx &&“Warning: Call-time pass-by-reference has been deprecated”怎么办?
自从php5.3,越来越多的人会遇到“Assigning the return value of new by reference is deprecated in xxxx”这样的提示,尤其是在国外 ...
- 重装JDK后Tomcat和Eclipse的配置
比如JDK之前是1.8.0_31的,升级之后变成了1.8.0_131之后,Tomcat需要做如下配置: 对于Eclipse中之前配置的Tomcat需要删除后重新添加一个.
- 分布式 OLTP 数据库
PingCAP招聘职位-拉勾网-最专业的互联网招聘平台 分布式 OLTP 数据库
- Shiro经过Redis管理会话实现集群(转载)
原文:http://www.myexception.cn/software-architecture-design/1815507.html Shiro通过Redis管理会话实现集群 写在前面 1.在 ...
- Manage, Administrate and Monitor GlassFish v3 from Java code usingAMX & JMX
http://kalali.me/manage-administrate-and-monitor-glassfish-v3-from-java-code-using-amx-jmx/ Manage, ...
- uva live 12846 A Daisy Puzzle Game
假设下一个状态有必败.那么此时状态一定是必胜,否则此时状态一定是必败 状压DP #include<iostream> #include<map> #include<str ...
- HTC 328T 提示手机存储不足 out of space怎么办
不要再用什么软件做优化,做清理,都是治标不治本啊. 1 用豌豆荚备份数据 2 手机恢复出厂设置 3 用豌豆荚恢复数据
- 编程基础知识——Java JNI开发流程(2)
android中使用jni调用本地C++库 android平台上的本地库文件后缀 .so.类似windows上的dll文件. 要在android上使用jni.首先须要下载android ndk. 操作 ...