知识点总结:

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. 将Python程序打包为exe方法

    将Python程序打包为exe文件,需要使用到的工具是pyinstaller pyinstaller是一个多平台的Python程序打包为exe的免费工具 安装pyinstaller: 1,在Windo ...

  2. Python内置函数(30)——super

    英文文档: super([type[, object-or-type]]) Return a proxy object that delegates method calls to a parent ...

  3. vueJs 源码解析 (三) 具体代码

    vueJs 源码解析 (三) 具体代码 在之前的文章中提到了 vuejs 源码中的 架构部分,以及 谈论到了 vue 源码三要素 vm.compiler.watcher 这三要素,那么今天我们就从这三 ...

  4. python 资产管理

    python 资产管理 一.Agent 方式 1.这个方法的优点:使用简单,速度快,适合服务器较多场景使用,缺点:服务器比较占资源,性能会变低. 2.使用Agent的前提条件是客户端(服务器)特别多的 ...

  5. python——函数

    python--函数 1.介绍: 在过去的十年间,大家广为熟知的编程方法无非两种:面向对象和面向过程,其实,无论哪种,都是一种编程的规范或者是如何编程的方法论.而如今,一种更为古老的编程方式:函数式编 ...

  6. 一种dubbo逻辑路由方案(服务化隔离环境)

    背景介绍 现在很多的公司都在用dubbo.springcloud做为服务化/微服务的开发框架,服务化之后应用越来越多,链路越来越长,服务环境的治理变的很困难.比如:研发团队的人很多的,同时有几个分支在 ...

  7. 屏幕上两点画线+DDALine算法

    编译环境VS2017+EasyX #include "stdafx.h" #include"graphics.h" void DDALine(int x0, i ...

  8. JavaScript sort() 方法

    定义和用法 sort() 方法用于对数组的元素进行排序. 语法 arrayObject.sort(sortby) 参数 描述 sortby 可选.规定排序顺序.必须是函数. 返回值 对数组的引用.请注 ...

  9. JSON.stringify()和JSON.parse()分别是什么

    JSON.stringify() 从一个对象中解析出字符串 JSON.stringify({"a":"1","b":"2" ...

  10. Terminal,git,vim常用命令整理以及删除本地git仓库

    Terminal常用命令 目录操作 ll 打开目录列表 ls -a 打开目录下所有文件列表 cd 切换到某目录 mkdir 创建目录 rmdir 删除空目录 rm -rf 目录名字 强制删除目录 mv ...