Swift学习之路-04

Swift学习之路-04

[toc]

Swift

( ) 相当于OC的 alloc / init
Swift 中对应一个函数 init( ) 构造函数
作用:给成员变量 分配空间,初始化成员变量

/*
在Swift中,默认同一个项目 所有的类都是共享的,可以直接访问,不需要 import 所有对象的属性 var 也可以直接访问到
/

错误分析

//1.Class 'Person' has no initializers

person没有初始化器

//2. Overriding declaration requires an 'override' keyword

重写 -> 父类有这个方法,子类重新实现,需要override 关键字

//3. Property 'self.name' not initialized at implicitly generated super.init call

属性’self.name’没有被初始化,implicitly(隐式生成的构造函数之前,属性self.name没有被初始化)

//4. Property 'self.name' not initialized at super.init call

在调用父类方法时,没有给父类方法初始化
提示给 self.name 初始化 ->分配空间,设置初始值

总结

swift构造函数

  1. 给自己的属性分配空间,并且设置初始值
  2. 调用父类的构造函数,给父类的属性分配空间设置初始值
    NSObject 没有属性,只有一个成员变量‘isa’
  3. 如果重载了构造函数,并且没有实现父类 init 方法,系统不再提供init()构造函数(默认是会有的!)
    – 因为 默认的构造函数,不能给本类的属性分配空间

swift的构造函数和OC反过来的
oc要先初始化父类在初始化子类成员变量
而swift则是先初始化子类成员变量,在初始化父类,
1、非optional 属性,都必须在构造函数中设置初始值,从而保证对象在被实例化的时候,属性都被正确初始化
2、在调用父类构造函数之前,必选保证本类的属性都已经完成初始化

Swift中的 构造函数不用写 func
override 重写

  • 父类存在相同的方法
  • 子类重新编写父类方法的实现

这样就必须保证所有成员变量的属性都要有值

KVC

  1. 定义模型属性的时候,如果是对象,通常都是可选的
  • 在需要的时候创建
  • 避免写构造函数,可以简化代码
-------------本文结束感谢您的阅读-------------