swift 初始化
知识点总结:
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 初始化的更多相关文章
- Swift - 初始化Initialization
		
Ps:苹果官方文档-Initialization 自定义控件初始化中常见的几种错误(指定构造器和便利构造器)截图: 意思是:1.没有添加重写符override(重写父类方法)2.没有重写initW ...
 - swift初始化
		
swift初始化 class INIT: NSObject { // 一个结构体的初始化 // 1.存储属性的初始化 struct Fahrenheit { var temperature :Doub ...
 - [swift]初始化方法自己主动继承
		
子类默认不会继承父类的初始化方法,然而,假设某种条件满足的话.父类的初始化方法还是能够继承给子类.在通常情况下,这意味着你不必复写父类的初始化方法.在安全的前提下能够以最低的代价继承父类的初始化方法. ...
 - Swift - 初始化方法返回nil表示初始化失败
		
自Swift1.1开始,初始化init方法便有返回nil的能力.我们可以在init声明的时候在其后面加上一个 ? 或者 ! 来表示初始化失败时可能返回nil. 比如,给Int类添加一个将字符串初始化成 ...
 - Swift初始化空字符串
		
为了构造一个很长的字符串,可以创建一个空字符串作为初始值.可以将空的字符串字面量赋值给变量,也可以初始化一个新的String 实例: var emptyString = "" // ...
 - Swift的初始化方法
		
我们在深入初始化方法之前,不妨先再想想Swift中的初始化想要达到一种怎样的目的. 其实就是安全.在Objective-C中,init方法是非常不安全的:没有人能保证init只被调用一次,也没有人保证 ...
 - Swift从入门到精通第十一篇 - 初始化 初识
		
初始化(学习笔记) 环境Xcode 11.0 beta4 swift 5.1 初始化 初始化是类.结构体.枚举生成实例的过程,为该类的每个存储属性设置初始值,有些在实例使用前的设置或初始化也可在此实现 ...
 - Swift语法总结补充(一)
		
Swift基础语法学习总结Swift高级语法学习总结Swift语法总结补充(一) 1. 可选类型是一种类型,String?就是Optional<String>,所以函数参数也可以声明为它2 ...
 - Swift互用性: 使用Objective-C特性编写Swift类(Swift 2.0版)-b
		
本节包括内容: 继承Objective-C的类(Inheriting from Objective-C Classes) 采用协议(Adopting Protocols) 编写构造器和析构器(Writ ...
 
随机推荐
- JavaScript 轮播图实例
			
HTML代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <t ...
 - Docker Mysql主从同步配置搭建
			
Docker Mysql主从同步配置搭建 建立目录 在虚拟机中建立目录,例如路径/home/mysql/master/data,目录结构如下: Linux中 新建文件夹命令:mkdir 文件夹名 返回 ...
 - Linux实战案例(7)安装jdk
			
一.文件准备 1.1 文件名称 jdk-8u121-linux-x64.tar.gz 1.2 下载地址 http://www.oracle.com/technetwork/java/javase/do ...
 - Django中自定义过滤器的使用
			
我在这里做的是: 从数据库查出id递增的一些信息,展示在前台. 编写一个过滤器判断查出数据的id是偶数的返回True 奇数返回False 1 创建项目,创建应用,注册应用,配置settings.py文 ...
 - python开发:初识python
			
python简介 Python可以应用于众多领域,如:数据分析.组件集成.网络服务.图像处理.数值计算和科学计算等众多领域.目前业内几乎所有大中型互联网企业都在使用Python,如:Youtube.D ...
 - php怎么返回json格式的数据
 - 图片处理之 Base64
			
网页上的图片资源如果采用 http 形式的 url 的话都会额外发送一次请求,网页发送的 http 请求次数越多,会造成页面加载速度越慢.而采用Base64格式的编码,将图片转化为字符串后,图片文件会 ...
 - 前端开发必备之Chrome开发者工具(下篇)
			
本文介绍的 Chrome 开发者工具基于 Chrome 65版本,如果你的 Chrome 开发者工具没有下文提到的那些内容,请检查下 Chrome 的版本 本文是 前端开发必备之Chrome开发者工具 ...
 - 阿里移动云专场专题.md
			
小激动 一年一度的阿里云栖大会是我们开发者的盛会,带着着激动的心情参加了这次开发者盛会,二话不说进入会场就被震感到了,先来张图聊表敬意. 主会场马云爸爸还是很有范的,将未来定义为无法定义,在这里宣布成 ...
 - Git reset到某一次commit
			
下图场景:张三和李四并行开发,张三提交commit1(bc2dd00),李四提交commit2(7f019d2),张三再提交commit3(44d4fc5),如果此时李四revert commit2, ...