swift学习笔记(五)构造过程

构造过程是为了使用某个类、结构体或枚举类型的实例而进行的准备过程。在构造过程中,对每一个属性进行了初始值预设和其它必要的准备和初始化工作。

与OC相比,swift的构造函数。不须要返回值。同一时候,在类和结构体的构造过程中,必须对全部的存储类型属性,包括继承自父类的属性。赋予合适的初始值。存储类型值不能处于一个未知状态。

在对属性进行初始化过程中,有两种方法,第一:使用构造方法,第二:在定义属性时,直接赋予默认值。

当使用构造方法对属性赋值时,不会触发不论什么的属性观測器。

当一个属性总是使用同一个初始值时。能够通过默认值的形式进行赋值。这样能够使构造器更加简洁,同一时候也能够自己主动导出属性的类型。

在构造函数中,是能够对常量属性进行改动的。原则:仅仅要在构造函数结束前,常量值能够确定,就能够在构造函数中随意时间点,对常量进行改动。

能够在构造器中加入參数,參数的数量和类型能够依据详细须要而定。但在每一个制定构造器中,都必须对全部属性进行赋值。

当一个类型有多个制定构造器时,主要通过參数名和类型来确定须要调用的构造器。

所以构造器的外部參数名显得尤为重要。

跟普通函数一样,系统会自己主动为每一个构造器的參数自己主动生成一个跟内部名字同样的外部參数名称。就相当于在构造函数前加入了一个“#”。

假设要去掉这样的默认结构。能够使用“_”来定义自己喜欢的外部參数名。

注意:在调用构造函数时,必需要通过外部參数名称。否则在编译器会报错。

假设一个属性能够为空时。在定义时,能够将其声明为可选属性类型

如:var string:String?

关于默认构造器:

当结构、枚举、类型中的全部属性都已经提供默认值并且自身没有提供不论什么构造函数时,系统会自己主动生成一个构造器。构造器中的全部属性的值都为默认值。

关于指定构造函数和便利构造函数

为了保证类中的全部存储属性,包括继承自父类的属性都有初始值。

swift提供了两种构造函数:指定构造函数和便利构造函数。

每一个类都必须拥有至少一个制定构造器,在init前加入convenience keyword。就可以声明为便利构造函数。

指定构造函数和便利构造函数之间的调用关系。必须遵循下面三种规则:

1.指定构造函数必须调用其直接父类的构造器。即super.init()

2.便利构造函数必须调用同一类中定义的其它构造器。包括制定构造器和便利构造器。

3.便利构造器终于必须以调用一个制定构造器结束。

总结例如以下:制定构造器是向上代理。便利构造器是横向代理。

关于继承和重载;

在子类中。是不会自己主动继承父类的构造器的,须要手动调用,即super。init

重载构造器函数时。不用写overridekeyword

当要为子类引入随意新属性提供默认值时,须遵循下面两条规则:

1.当子类中没有不论什么指定构造器,子类将自己主动继承全部父类的制定构造器。

2.假设子类提供了全部父类制定构造器的实现。无论是通过规则1实现的。还是通过自己定义实现的,它将自己主动继承全部父类的便利构造器。

时间: 2024-10-29 19:06:49

swift学习笔记(五)构造过程的相关文章

swift学习笔记(六)析构过程和使用闭包对属性进行默认值赋值

一.通过闭包和函数实现属性的默认值 当某个存储属性的默认值需要定制时,可以通过闭包或全局函数来为其提供定制的默认值. 注:全局函数结构体和枚举使用关键字static标注    函数则使用class关键字标注 当对一个属性使用闭包函数进行赋值时,每当此属性所述的类型被创建实例时,对应的闭包或函数会被调用,而他们的返回值会被作为属性的默认值. ESC: Class SomeCLass{ let someProperty:SomeType={ //给someProperty赋一个默认值 //返回一个与

Swift学习笔记五:循环和条件语句

一.循环语句 1. for循环 1) for -in 循环,对于数据范围,序列,集合等中的每一个元素,都执行一次 for a in 0...5{}    //循环迭代,从a=0到a=5,执行{}里的代码 注意:a只循环中存在,也就是出了{}a就不存在了 或者遍历数组 let a = [1,2,3] for b in a{} //循环迭代,从b=1到b=3 如果你不需要序列中的每一个值,可以使用_来忽略它,仅仅只是使用循环体本身: for _ in 0...5{}    //循环执行{}里的代码,

Swift学习笔记五

基础运算符 Swift的大部分运算符和C及OC相同,也分一元二元多元的,这里只记录一些Swift特有的性质或写法. 赋值运算符( = ) 在等号右边是一个有多个值的元组时,它的成员值可以分解并同时分别赋值给常量或者变量: let (x, y) = (1, 2) // x is equal to 1, and y is equal to 2 和C.OC不同的是,赋值运算符本身并不返回值,因此如下写法是错误的: if x = y { // this is not valid, because x =

十五、Android学习笔记_授权过程

1.需要申请App Key和App Secret.不同的开发平台有不同的接入方式,可以参考文档,然后将这两个值放进去. 2.通过OAuth类实现认证,它会自动跳转到认证界面,进行授权,成功之后需要处理回调接口. 3.在第二步调用回调接口时,它会返回用户的基本信息,比如用户id.此时需要将用户id信息保存起来,为后面登录做准备.回调接口的写法就为myapp://AuthorizeActivity,其中scheme全部为小写字母. <activity android:name="com.wei

Swift学习笔记十四:构造(Initialization)

类和结构体在实例创建时,必须为所有存储型属性设置合适的初始值.存储型属性的值不能处于一个未知的状态. 你可以在构造器中为存储型属性赋初值,也可以在定义属性时为其设置默认值.以下章节将详细介绍这两种方法. 注意: 当你为存储型属性设置默认值或者在构造器中为其赋值时,它们的值是被直接设置的,不会触发任何属性观测器(property observers). 一.基本语法 class Human{ var name :String init(){ name = "human" } init(n

Swift 学习笔记十五:扩展

扩展就是向一个已有的类.结构体或枚举类型添加新功能(functionality).扩展和 Objective-C 中的分类(categories)类似.(不过与Objective-C不同的是,Swift 的扩展没有名字.) Swift 中的扩展可以: 1.添加计算型属性和计算静态属性 2.定义实例方法和类型方法 3.提供新的构造器 4.定义下标 5.定义和使用新的嵌套类型 6.使一个已有类型符合某个协议 一.扩展属性,构造器,方法 class Human{ var name:String? va

Swift学习笔记:类和结构

一.类和结构的异同 类和结构有一些相似的地方,它们都可以: 1. 定义一些可以赋值的属性: 2. 定义具有功能性的方法 3. 定义下标,使用下标语法 4. 定义初始化方法来设置初始状态 5. 在原实现方法上的可扩展性 根据协议提供某一特定类别的基本功能 1. 类还有一些结构不具备的特性: 2. 类的继承性 3. 对类实例实时的类型转换 4. 析构一个类的实例使之释放空间 5. 引用计数,一个类实例可以有多个引用 1. 定义语法 struct Name{ let firstName = "&quo

Swift学习笔记 - 可选 ?

可选类型 使用可选类型(optionals)来处理值可能缺失的情况.可选类型表示: 有值,等于 x 或者 没有值 注意:C 和 Objective-C 中并没有可选类型这个概念.最接近的是 Objective-C 中的一个特性,一个方法要不返回一个对象要不返回nil,nil表示“缺少一个合法的对象”.然而,这只对对象起作用——对于结构体,基本的 C 类型或者枚举类型不起作用.对于这些类型,Objective-C 方法一般会返回一个特殊值(比如NSNotFound)来暗示值缺失.这种方法假设方法的

Swift学习笔记(二)参数类型

关于参数类型,在以前的编程过程中,很多时间都忽视了形参与实参的区别.通过这两天的学习,算是捡回了漏掉的知识. 在swift中,参数有形参和实参之分,形参即只能在函数内部调用的参数,默认是不能修改的,如果想要修改就需要在参数前添加var声明. 但这样的声明过后,仍旧不会改变实参的值,这样就要用到inout了,传递给inout的参数类型必须是var类型的,不能是let类型或者字面类型,(字面类型是在swift中常提的一个术语,个人认为就是赋值语句,也不能修改)而且在传递过程中,要用传值符号"&