知识点总结:

1、结构体

1.1、默认初始化方法:1、空初始化方法;2、成员初始化方法

struct Person{
var name = "tom"
var age = } let person = Person()//空初始化方法
print("person:name=\(person.name),age=\(person.age)") let person1 = Person(name:"JIM",age:)//成员初始化方法
print("person:name=\(person1.name),age=\(person1.age)")

1.2、自定义初始化方法和委托初始化方法

一旦有了自己的初始化方法,swift就不会提供默认的初始化方法。swift编译器允许在初始化过程中初始化常量属性。

struct Person{
var name:String
let age:Int init(name:String,age:Int){
self.name = name
self.age = age
}
//委托初始化
init(name:String){
self.init(name: name, age: )
} } let person1 = Person(name:"JIM",age:)
print("person:name=\(person1.name),age=\(person1.age)")

2、类初始化

2.1、默认初始化方法

swift 只会提供一个默认的空初始化方法。

2.2 指定初始化方法和便捷初始化方法

一般来说,类不会继承父类的初始化方法,因为swift希望避免子类在不经意间提供无法为所有属性赋值的初始化方法(子类经常会增加父类不存在的属性)。让子类提供自己的初始化方法可以避免实例被不完整的初始化方法初始化。不过,类确实会在一些情况下自动继承父类的初始化方法。如果子类为所有新增的属性提供了默认值,那么在以下两种场景下,类会继承父类的初始化方法。

  • 如果子类没有定义任何指定初始化方法,就会继承父类的指定初始化方法。
  • 如果子类实现了父类的所有指定初始化方法(无论是通过显示实现还是隐式继承),就会继承父类的所有便捷初始化方法
class Person{
var name:String
let age:Int init(name:String,age:Int){
self.name = name
self.age = age
}
convenience init(name:String){
self.init(name: name, age: )
}
} class Student:Person{
var score = } let stu = Student(name: "li")//因为子类所有新增属性提供了默认值,所以继承父类的指定构造函数和便捷函数
class Person{
var name:String
let age:Int init(name:String,age:Int){
self.name = name
self.age = age
}
convenience init(name:String){
self.init(name: name, age: )
}
} class Student:Person{
var score:Int
override init(name: String, age: Int) {
self.score =
super.init(name: name, age: age)
} } let stu = Student(name: "li")//因为子类实现父类所有的置顶初始化方法,所以继承父类的指定构造函数和便捷函数

2.3、必需初始化方法

一个类可以要求子类提供特定的初始化方法。

class Person{
var name:String
let age:Int required init(name:String,age:Int){
self.name = name
self.age = age
}
} class Student:Person{
var score:Int
required init(name: String, age: Int) {
self.score =
super.init(name: name, age: age)
} }

2.4、反初始化

class Person{
var name:String
let age:Int init(name:String,age:Int){
self.name = name
self.age = age
}
deinit {
print("deinit")
}
}

3、可失败的初始化方法

class Person{
var name:String
let age:Int init?(name:String,age:Int){
self.name = name
self.age = age
}
} struct Town{
var region = "left"
init?(region:String) {
self.region = region
}
}

最新文章

  1. MongoDB系列一:CentOS7.2下安装mongoDB3.2.8
  2. xcode相关配置
  3. PhoneGap初试!
  4. px 与 dp, sp换算公式?
  5. WCF实现方法重载
  6. python 处理中文文件时的编码问题,尤其是utf-8和gbk
  7. hnoi 2016 省选总结
  8. php cloure闭包
  9. EL表达式 JSTL中的常用EL函数 动态数据的国际化
  10. php 微信3 自定义菜单
  11. 将CSS CLIP属性应用在:扩展覆盖效果
  12. [React] React Router: activeStyle & activeClassName
  13. JavaScript瀑布流代码
  14. oracle转Mysql中,varchar2(10)和number应该转换为什么类型? (转)
  15. Unknown/unsupported storage engine: InnoDB
  16. 优化关键渲染路径CRP
  17. Android View框架总结(六)View布局流程之Draw过程
  18. 使用sklearn时cannot import name MLPClassifier的解决办法
  19. MySQL5.7 并行复制的学习
  20. DevExpress v18.2新版亮点——DevExtreme篇(四)

热门文章

  1. JAVA中的Log4j
  2. mosquitto安装和测试
  3. java的分数类
  4. Spring MVC的核心流程(步骤)
  5. 一次完败的Release
  6. springboot--mybatis--pagehelper分页整合不起作用
  7. 线程的同步控制(Synchronization)
  8. JavaScript数据结构与算法(五) 数组基础算法
  9. 【Swift】IOS开发中自定义转场动画
  10. [BZOJ 5093]图的价值