前言:通过学习与研究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中类与结构的初始化相关推荐

  1. [绍棠_Swift] Swift中类和结构体的区别

    类和结构体有许多相同之处,也有许多不同之处. 二者区别如下: 1,类可以继承,结构体不可以 2,可以让一个类的实例来反初始化,释放存储空间,结构体做不到 3,类的对象是引用类型,而结构体是值类型.所以 ...

  2. Swift 类与结构体

    前言 类和结构体是人们构建代码所用的一种通用且灵活的构造体.我们可以使用完全相同的语法规则来为类和结构体定义属性(常量.变量)和添加方法,从而扩展类和结构体的功能. 与其他编程语言所不同的是,Swif ...

  3. swift类和结构体

    2.9类和结构体 本页包含内容: 类和结构体对比 结构体和枚举是值类型 类是引用类型 类和结构体的选择 字符串.数组.和字典类型的赋值与复制行为 类和结构体是人们构建代码所用的一种通用且灵活的构造体. ...

  4. Swift —— 类与结构体

    Swift -- 类与结构体 1. 初识类与结构体 1.1 异同点 1.2 类(引用类型) 1.3 结构体 (值类型) 1.4 类和结构体的内存位置 1.4.1 结构体的内存位置 1.4.2 类的内存 ...

  5. Swift中类的使用

    主要内容 类的介绍和定义 类的属性 类的构造函数 一. 类的介绍和定义 Swift也是一门面向对象开发的语言 面向对象的基础是类,类产生了对象 在Swift中如何定义类呢? class是Swift中的 ...

  6. Swift 类和结构体总结

    Swift 类和结构体总结 类和结构体都是多功能而且灵活的结构,它们可以作为构建块(building block)在代码中使用.你可以为类和结构体定义属性和方法来扩充它们的功能.对于自定义类,Swif ...

  7. Go 学习笔记(33)— Go 自定义类型 type(自定义结构体、结构体初始化、结构体内嵌、自定义接口)

    1. 自定义类型格式 用户自定义类型使用关键字 type ,其语法格式是: type newType oldType oldType 可以是自定义类型.预声明类型.未命名类型中的任意一种. newTy ...

  8. Linux2.6内核 -- 结构的初始化

          Linux 内核中用到了大量的结构体,在编码规范中也给出了结构体初始化的规则,这篇文章中有对其的解释:http://blog.csdn.net/dlutbrucezhang/article ...

  9. c++ 结构体初始化_【干货】c语言基础语法——结构体

    1.关于C语言结构体的引入 学习环境搭建1_Linux C语言_嵌入式开发工程师-创客学院​www.makeru.com.cn 在实际问题中有时候我们需要几种数据类型一起来修饰某个变量. 例如一个学生 ...

最新文章

  1. redux middleware 源码分析
  2. css编写的技巧效果总结
  3. shocked的歌曲 类似shell_Shell Shocked
  4. spring boot web 开发示例
  5. android真机单元测试,Android 单元测试入门
  6. es xxx_by_query
  7. Enfocus PitStop Pro 2021 for Mac(pdf增强插件)
  8. 解决“gettools.exe 已停止工作”问题
  9. 电力数据可视化大屏设计
  10. 详解哈夫曼树和哈夫曼编码
  11. 英语——句子结构和成分大全【学习笔记】
  12. android布局事件吗,Android事件分发机制
  13. 社群运营中KOL的作用
  14. 展现巨星风采!字母哥关键时刻挺身而出
  15. 模式识别基本概念小结(学习笔记)
  16. 因签署Android独家协议排除竞争对手 谷歌在印度被罚款1.62亿美元
  17. w ndows7与windows10区别,w10系统和w7哪个好用2020
  18. 币圈拉盘是什么意思?
  19. 一个完整的新闻发布系统
  20. 博文The Illustrated Transformer 的PDF格式

热门文章

  1. 取消xp开机默认登陆账户
  2. matlab的和操作
  3. Spring----AOP的术语
  4. 图文解说:Discuz论坛基础设置第一弹
  5. Windows Phone 7 button控件
  6. 用vlc搭建简单流媒体服务器(UDP和TCP方式)-转 rtsp很慢才能显示
  7. Spring源码学习笔记:Spring设计模式对比和Spring的OOB,BOP,AOP,IOC,DI/DL
  8. [Python] L1-025. 正整数A+B-PAT团体程序设计天梯赛GPLT
  9. L1-010. 比较大小-PAT团体程序设计天梯赛
  10. c语言命令行参数怎么输入_C语言程序设计——这个函数原型你看懂了吗