Swift中类与结构的初始化
前言:通过学习与研究swift3.0的官方文档关于初始化这部分可以总结为一句话:类与结构是确保一个类型的实例可以使用之前,其所有存储属性都得到了正确的赋值。
一,结构的初始化1
1 struct FirstStruct{2 3 let b:Int4 let c:Int5 6 init() {7 b = 28 c = 39 10 } 11 } 12 13 let fs = FirstStruct()
解析:这个结构中b,c这两个存储属性并未赋初值,而是在init初始化器(相当于Java中的构造函数)中赋初值。
二,结构的初始化2
1 struct SecondStruct{ 2 3 let b:Int 4 let c:Int 5 6 } 7 8 let ss = SecondStruct(b:2,c:3)
解析:结构中,编译器会自动生成memberwise的初始化器,因此在调用结构时必须传入初始化值。
三,结构中初始化错误示例
1 //struct ThirdStruct{2 // 3 // let b:Int4 // let c:Int5 // 6 // init() {7 // b = 08 // }9 //} 10 // 11 //let ts = ThirdStruct(c:3)
注意:结构中声明了初始化器,编译器将不会给我们添加memberwise的初始化器,(原理和Java的空构造函数一致)上面这个例子是不能通过编译的。
四,结构中init可以通过self关键字调用其他的init
1 struct FourthStruct{2 3 let b:Int4 let c:Int5 6 init() {7 8 self.init(b:2)9 10 } 11 init(b:Int){ 12 c = 2 13 self.b = b 14 } 15 } 16 17 let fos = FourthStruct()
五,类初始化错误示例
1 //错误示例 2 //class SecondClass{ 3 // 4 // let b:Int 5 // let c:Int 6 // 7 //} 8 // 9 //let sc = SecondClass(b:2,c:3)
解析:类里面也可以通过声明init初始化器,若不提供初始化器,编译器不会提供默认的初始化器
六,类的(Designated init)初始化器
1 class Parent2{2 var name:String3 var height:Int4 init(name:String,height:Int){5 self.name = name6 self.height = height7 }8 }9 let p2 = Parent2(name:"zs",height:168) 10 p2.height 11 p2.name
解析:没有特殊的修饰符的init就是专门的(Designated init)初始化器,主要的作用就是确保所有的存储属性得到初始化
七,Designated init一般只有一个,可以有多个,根据你调用时赋值的不用而调用不同的初始化器
1 class Parent3{2 var name:String3 var sex:String4 init(name:String,sex:String){5 self.name = name6 self.sex = sex7 }8 init(name:String){9 self.name = name 10 sex = "男" 11 } 12 13 } 14 15 let p3 = Parent3(name:"zs",sex:"女") 16 let p4 = Parent3(name:"ls") 17 p3.sex 18 p4.sex
八,类的便利(convenience)初始化器
class Parent3{var name:Stringvar sex:Stringinit(name:String,sex:String){self.name = nameself.sex = sex}convenience init(name:String){self.init(name:name,sex:"男")}convenience init(){self.init(name:"zs")}}let p3 = Parent3(name:"zs") let p4 = Parent3() p3.sex p4.sex
解析:通过在初始化器前声明convenience关键字可以声明一个便利初始化器,它的作用是方便创建对象时使用,但它必须直接或间接调用专门初始化器
九,子类的专门初始化器必须调用父类的专门初始化器,子类不能调用父类的便利初始化器
1 class Parent4{2 var name:String3 var sex:String4 init(name:String,sex:String){5 self.name = name6 self.sex = sex7 }8 9 convenience init(name:String){ 10 self.init(name:name,sex:"男") 11 } 12 } 13 14 //----------------------------------------------- 15 class Child4:Parent4{ 16 var age:Int 17 init(age:Int) { 18 self.age = age 19 //super.init(name: "ls")错误示例 20 super.init(name: "zs",sex:"妖") 21 22 } 23 convenience init(){ 24 self.init(age:12) 25 } 26 } 27 28 let c4 = Child4() 29 c4.name
转载于:https://www.cnblogs.com/zhangyingai/p/7098973.html
Swift中类与结构的初始化相关推荐
- [绍棠_Swift] Swift中类和结构体的区别
类和结构体有许多相同之处,也有许多不同之处. 二者区别如下: 1,类可以继承,结构体不可以 2,可以让一个类的实例来反初始化,释放存储空间,结构体做不到 3,类的对象是引用类型,而结构体是值类型.所以 ...
- Swift 类与结构体
前言 类和结构体是人们构建代码所用的一种通用且灵活的构造体.我们可以使用完全相同的语法规则来为类和结构体定义属性(常量.变量)和添加方法,从而扩展类和结构体的功能. 与其他编程语言所不同的是,Swif ...
- swift类和结构体
2.9类和结构体 本页包含内容: 类和结构体对比 结构体和枚举是值类型 类是引用类型 类和结构体的选择 字符串.数组.和字典类型的赋值与复制行为 类和结构体是人们构建代码所用的一种通用且灵活的构造体. ...
- Swift —— 类与结构体
Swift -- 类与结构体 1. 初识类与结构体 1.1 异同点 1.2 类(引用类型) 1.3 结构体 (值类型) 1.4 类和结构体的内存位置 1.4.1 结构体的内存位置 1.4.2 类的内存 ...
- Swift中类的使用
主要内容 类的介绍和定义 类的属性 类的构造函数 一. 类的介绍和定义 Swift也是一门面向对象开发的语言 面向对象的基础是类,类产生了对象 在Swift中如何定义类呢? class是Swift中的 ...
- Swift 类和结构体总结
Swift 类和结构体总结 类和结构体都是多功能而且灵活的结构,它们可以作为构建块(building block)在代码中使用.你可以为类和结构体定义属性和方法来扩充它们的功能.对于自定义类,Swif ...
- Go 学习笔记(33)— Go 自定义类型 type(自定义结构体、结构体初始化、结构体内嵌、自定义接口)
1. 自定义类型格式 用户自定义类型使用关键字 type ,其语法格式是: type newType oldType oldType 可以是自定义类型.预声明类型.未命名类型中的任意一种. newTy ...
- Linux2.6内核 -- 结构的初始化
Linux 内核中用到了大量的结构体,在编码规范中也给出了结构体初始化的规则,这篇文章中有对其的解释:http://blog.csdn.net/dlutbrucezhang/article ...
- c++ 结构体初始化_【干货】c语言基础语法——结构体
1.关于C语言结构体的引入 学习环境搭建1_Linux C语言_嵌入式开发工程师-创客学院www.makeru.com.cn 在实际问题中有时候我们需要几种数据类型一起来修饰某个变量. 例如一个学生 ...
最新文章
- redux middleware 源码分析
- css编写的技巧效果总结
- shocked的歌曲 类似shell_Shell Shocked
- spring boot web 开发示例
- android真机单元测试,Android 单元测试入门
- es xxx_by_query
- Enfocus PitStop Pro 2021 for Mac(pdf增强插件)
- 解决“gettools.exe 已停止工作”问题
- 电力数据可视化大屏设计
- 详解哈夫曼树和哈夫曼编码
- 英语——句子结构和成分大全【学习笔记】
- android布局事件吗,Android事件分发机制
- 社群运营中KOL的作用
- 展现巨星风采!字母哥关键时刻挺身而出
- 模式识别基本概念小结(学习笔记)
- 因签署Android独家协议排除竞争对手 谷歌在印度被罚款1.62亿美元
- w ndows7与windows10区别,w10系统和w7哪个好用2020
- 币圈拉盘是什么意思?
- 一个完整的新闻发布系统
- 博文The Illustrated Transformer 的PDF格式
热门文章
- 取消xp开机默认登陆账户
- matlab的和操作
- Spring----AOP的术语
- 图文解说:Discuz论坛基础设置第一弹
- Windows Phone 7 button控件
- 用vlc搭建简单流媒体服务器(UDP和TCP方式)-转 rtsp很慢才能显示
- Spring源码学习笔记:Spring设计模式对比和Spring的OOB,BOP,AOP,IOC,DI/DL
- [Python] L1-025. 正整数A+B-PAT团体程序设计天梯赛GPLT
- L1-010. 比较大小-PAT团体程序设计天梯赛
- c语言命令行参数怎么输入_C语言程序设计——这个函数原型你看懂了吗