知识点总结:

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. 剑指offer-数据流中的中位数

    题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值.如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值.   ...

  2. c# 几种深拷贝方式的比较

    public static class Tools { //利用 BinaryFormatter 实现深拷贝 public static T DeepCopyByBinary<T>(thi ...

  3. .NET:持续进化的统一开发平台

    阅读文本大概需要 8 分钟. 标题使用的是进化这个词语,是因为 .NET 在不断的努力,也在不断的重构. 这篇文章的更多目的和意义在于科普,俗称"传教". # 持续进化的 .NET ...

  4. 前端之JavaScript内容

    一.JavaScript概述 1.JavaScript的历史 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnv软件中),后将其改名ScriptEas ...

  5. Hive函数:CUME_DIST,PERCENT_RANK

    参考自:大数据田地http://lxw1234.com/archives/2015/04/185.htm 数据准备: d1,user1, d1,user2, d1,user3, d2,user4, d ...

  6. python如何转换word格式、读取word内容、转成html

    # python如何转换word格式.读取word内容.转成html? import docx from win32com import client as wc # 首先将doc转换成docx wo ...

  7. jquery的attr()方法

    一.定义和用法 attr() 方法设置或返回被选元素的属性和值. 当该方法用于返回属性值,则返回第一个匹配元素的值. 当该方法用于设置属性值,则为匹配元素设置一个或多个属性/值对. 二.语法 返回属性 ...

  8. Spring Cloud学习笔记-005

    服务消费者 之前已经搭建好了微服务中的核心组件——服务注册中心(包括单节点模式和高可用模式).也有了服务提供者,接下来搭建一个服务消费者,它主要完成两个目标,发现服务以及消费服务.其中,服务发现的任务 ...

  9. spring boot / cloud (二十) 相同服务,发布不同版本,支撑并行的业务需求

    spring boot / cloud (二十) 相同服务,发布不同版本,支撑并行的业务需求 有半年多没有更新了,按照常规剧本,应该会说项目很忙,工作很忙,没空更新,吧啦吧啦,相关的话吧, 但是细想想 ...

  10. Git reset到某一次commit

    下图场景:张三和李四并行开发,张三提交commit1(bc2dd00),李四提交commit2(7f019d2),张三再提交commit3(44d4fc5),如果此时李四revert commit2, ...