知识点总结:

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
}
}

swift 初始化的更多相关文章

  1. Swift - 初始化Initialization

    Ps:苹果官方文档-Initialization 自定义控件初始化中常见的几种错误(指定构造器和便利构造器)截图:   意思是:1.没有添加重写符override(重写父类方法)2.没有重写initW ...

  2. swift初始化

    swift初始化 class INIT: NSObject { // 一个结构体的初始化 // 1.存储属性的初始化 struct Fahrenheit { var temperature :Doub ...

  3. [swift]初始化方法自己主动继承

    子类默认不会继承父类的初始化方法,然而,假设某种条件满足的话.父类的初始化方法还是能够继承给子类.在通常情况下,这意味着你不必复写父类的初始化方法.在安全的前提下能够以最低的代价继承父类的初始化方法. ...

  4. Swift - 初始化方法返回nil表示初始化失败

    自Swift1.1开始,初始化init方法便有返回nil的能力.我们可以在init声明的时候在其后面加上一个 ? 或者 ! 来表示初始化失败时可能返回nil. 比如,给Int类添加一个将字符串初始化成 ...

  5. Swift初始化空字符串

    为了构造一个很长的字符串,可以创建一个空字符串作为初始值.可以将空的字符串字面量赋值给变量,也可以初始化一个新的String 实例: var emptyString = "" // ...

  6. Swift的初始化方法

    我们在深入初始化方法之前,不妨先再想想Swift中的初始化想要达到一种怎样的目的. 其实就是安全.在Objective-C中,init方法是非常不安全的:没有人能保证init只被调用一次,也没有人保证 ...

  7. Swift从入门到精通第十一篇 - 初始化 初识

    初始化(学习笔记) 环境Xcode 11.0 beta4 swift 5.1 初始化 初始化是类.结构体.枚举生成实例的过程,为该类的每个存储属性设置初始值,有些在实例使用前的设置或初始化也可在此实现 ...

  8. Swift语法总结补充(一)

    Swift基础语法学习总结Swift高级语法学习总结Swift语法总结补充(一) 1. 可选类型是一种类型,String?就是Optional<String>,所以函数参数也可以声明为它2 ...

  9. Swift互用性: 使用Objective-C特性编写Swift类(Swift 2.0版)-b

    本节包括内容: 继承Objective-C的类(Inheriting from Objective-C Classes) 采用协议(Adopting Protocols) 编写构造器和析构器(Writ ...

随机推荐

  1. Tomcat性能优化及JVM内存工作原理

    Java性能优化原则:代码运算性能.内存回收.应用配置(影响Java程序主要原因是垃圾回收,下面会重点介绍这方面) 代码层优化:避免过多循环嵌套.调用和复杂逻辑. Tomcat调优主要内容如下: 1. ...

  2. 搭建一个web服务下载HDFS的文件

    需求描述 为了能方便快速的获取HDFS中的文件,简单的搭建一个web服务提供下载很方便快速,而且在web服务器端不留临时文件,只做stream中转,效率相当高! 使用的框架是SpringMVC+HDF ...

  3. tensorflow安装篇

    安装虚拟机redhat7u4-64 镜像文件在http://www.linuxfly.org/post/659 更换yum 参考https://blog.csdn.net/xiaoyiaoyou/ar ...

  4. hadoop2.6.0实践:000 虚拟机配置

  5. redis入门(04)redis的数据类型

    Redis 数据类型 Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合). 1.String(字符串) ...

  6. Window7下安装Jmeter

    解压Jmeter,存放位置为D:\apache-jmeter-2.11 用户变量——>新建变量名JMETER_HOME,变量值为存放目录 系统变量——>添加;%JMETER_HOME%/l ...

  7. SpringBoot集成Mybatis

    1.创建SpringBoot工程 根据 http://www.cnblogs.com/vitasyuan/p/8765329.html 说明创建SpringBoot项目. 2.添加相关依赖 在pom. ...

  8. Hibernate(十五):QBC检索、本地SQL检索和HQL删除

    QBC检索 QBC查询就是通过使用Hibernate提供的Query By Criteria API来查询对象,这种API封装了SQL语句的动态拼装,对查询提供了更加面向对象的功能接口. 1)通过Cr ...

  9. python的切片操作

    切片操作符是序列名后跟一个方括号,方括号中有一对可选的数字,并用冒号分割.注意这与你使用的索引操作符十分相似.记住数是可选的,而冒号是必须的. 切片操作符中的第一个数(冒号之前)表示切片开始的位置,第 ...

  10. Canvas-自由绘制

    #自由绘制 from tkinter import * master=Tk() c=Canvas(master,width=400,height=200) c.pack() def paint(eve ...