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 ...
随机推荐
- vue项目中的常见问题
总结了几个vue项目开发过程中遇到的常见问题,希望大家注意. 注:文末有福利! 一.样式问题 1.vue中使用less 安装less依赖 npm install less less-loader -- ...
- Spring中报"Could not resolve placeholder"的解决方案
除去properites文件路径错误.拼写错误外,出现"Could not resolve placeholder"很有可能是使用了多个PropertyPlaceholderCon ...
- 使用TortoiseSVN打Tag
参考了 https://blog.csdn.net/liuzx32/article/details/9123401. 值得注意的点是: 选择路径的时候,不要先点进去自己建好叶子节点路径再选择该路径,会 ...
- python 杂货铺
python 杂货铺之不知道的python操作 1.交互模式下的神奇的_ windos中cmd交互模式中下(python2,python3),最近一个表达式的值赋给变量 _.这样我们就可以把它当作一个 ...
- Linux下C语言socket通信实现发送读取的文件内容--简单实现代码
本次代码涉及到的内容:socket通讯,文件读取 读取的文件以及文件位置: 要读取的文件和c文件在同一个目录下.客户端(client)读取的是123.xml,服务端(server)读取的是23.xml ...
- sublime高亮代码导出
何在word/博客中使用SublimeText风格的代码高亮样式 原文链接:http://www.cnblogs.com/Wayou/p/highlight_code_with_sublimetext ...
- 简单的sql调优(批处理)
最近在写一个java的爬虫程序时,遇到了一个大量数据进行插入更新和大量数据循环查询的问题,所以查了一下一般的调优的方式,下面主要介绍我采取的调优措施. 一 .调优思路 先说说我采取方式的调优的思路,这 ...
- [LeetCode] Keyboard Row 键盘行
Given a List of words, return the words that can be typed using letters of alphabet on only one row' ...
- Python系列之 - python数据类型
原链接:https://blog.csdn.net/m0_37745438/article/details/79572884 学习一门语言,往往都是从Hello World开始. 但是笔者认为,在一个 ...
- dnslog搭建
为什么想重写这个呢,想说后面扫描ssrf和命令执行的时候,能快速改成自己想要的api,更容易修改一些. 工具改自:https://github.com/bugScanTeam/DNSLog 需要两个域 ...