在OC中我们对于构造函数可能了解的不是太多,但是在Swift中这个概念还是很常见的,构造函数其实就是去建立一个对象,给属性去分配空间,设置初始数值,swift中的构造函数都是init。
在我们去给一个类设置属性的时候,应该去设置为变量。比如说类如下定义
import UIKit
class Person: NSObject {
//定义一个属性,类的属性一般都是可变的,如果定义成可选项,初始值为nil,下面name="kkk"可以省略,但如果不是定义成可选项就一定需要去写,如果定义成let也要写
var name: String?
//重写默认的构造函数
override init() {
//注意,子类属性的初始化要在调用super.init()之前
//初始化这个变量
//name="kkk"
//调用父类的构造函数,给NSObject父类的属性进行初始化,此处不写,系统也会隐式的帮你调用
super.init()
}
}
在Swift中,默认所有的属性和方法都是全局共享的,不需要用#import,可以直接使用
重载和重写的区别
重载指的是函数名相同,参数名/参数类型/参数个数不同
重载函数并不仅仅局限于构造函数
函数的重载是面向对象程序设计语言的重要的标志
OC不支持函数的重载,OC中是通过..With...来实现的
重写是子类在父类拥有的方法的基础进行扩展,需要使用override关键字
在ios开发中,所有的属性都是用到的时候才去加载的
简单的说下KVC的概念
KVC的本质其实就是在运行时动态的给对象发生 setValue:forKey: 这个消息。
init(dict: [String: Any])
{
//先调用super.init保证对象创建完成,然后再去用KVC去设置属性值
super.init()
setValuesForKeys(dict)
}
我们在这里使用了setValuesForKeys这么一个函数,其实这个函数的执行过程是这样子的,会顺序去执行setValue forKey,如果没有相应的key就会调用setValue forUndefineKey
记录下便利构造函数的概念
构造函数中,如果出现了?就表示这个构造函数不一定会创建出对象
convenience - 便利构造函数的意思
它的作用就是能提供条件检测
能允许返回nil,如果是指定的构造函数,必须要创建对象
便利构造函数必须在条件检测完成之后,用self.的方式去调用其他的构造函数,去创建对象
能够简化对象创建的方法
如下代码所述
convenience init?(name: String, age: Int)
{
if(age<0)
{
return nil
}
self.init(name: "kkk")
}
在Swift中对象释放的方法是deinit{ }方法,主要是负责对象被销毁之前,内存的释放。
deinit{ }方法不允许重载,不允许带参数,不允许直接的去调用,系统会自动的去调用
Swift中的构造函数不用写 func
在调用父类构造函数之前,必须保证本类的属性已经初始化完成。