swift中构造函数 重写与重载

日常开发中,实际上这种构造函数写的很少,因为通常模型里面用字典转模型,但是这是作为OC程序员必须要知道的.所以记录下,以供自己学习.

import UIKit
构造函数写法
1.构造函数的目的:给自己的属性分配空间并设置初始值
2.调用父类的构造函数之前,需要先给本类的属性设置初始值
3.调用父类的'构造函数' 给父类的属性分配空间 设置初始值 NSObject没有属性,只有一个成员变量'isa'
4.如果重载了构造函数,并没有实现父类init方法,系统不再提供init() 构造函数(默认是会有的)
-因为默认的构造函数,不能给本类的属性分配空间

// 1.Class 'Person'has no initializers
//Person类没有'初始化器' 构造函数 可以有多个 默认的时候init

class Person: NSObject {
var name : String

//2. Overriding declaration requires an 'override' keyword
//3. 重'写' ->父类有这个方法,子类重新实现,需要override关键字
//Property 'self.name' not initialized at implicitly generated super.init call
//implicitly(隐式生成的super.init) 调用父类的构造函数 属性self.name没有被初始化 

override init() {
    //4. Property 'self.name' not initialized at super.init call
    //提示给self.name初始化 -> 分配空间,设置初始值!
    name = "Wang"
    super.init()
  }
}

//'重载'函数名相同,但是参数和个数不同
//重载可以给自己的属性从外部设置好初始值
//OC没有重载 都是initWith***
init(name:String) {
    //使用参数的name设置给属性
    self.name = name
    //调用父类的构造函数
    super.init()
}

注:
1.非Optional属性,都必须在构造函数中设置初始值,从而保证对象在被实例化的时候,属性都被正确实例化
2.调用父类构造函数前,必须保证本类的属性都已经完成初始化
3.swift中的构造函数不用写fun

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本章将会介绍 存储属性的初始赋值自定义构造过程默认构造器值类型的构造器代理类的继承和构造过程可失败构造器必要构造器...
    寒桥阅读 4,119评论 0 0
  • 123.继承 一个类可以从另外一个类继承方法,属性和其他特征。当一个类继承另外一个类时, 继承类叫子类, 被继承的...
    无沣阅读 5,266评论 2 4
  • 构造过程是使用类、结构体或枚举类型的实例之前的准备过程。在新实例可用前必须执行这个过程,具体操作包括设置实例中每个...
    莽原奔马668阅读 3,923评论 0 3
  • 20- 枚举,枚举原始值,枚举相关值,switch提取枚举关联值 Swift枚举: Swift中的枚举比OC中的枚...
    iOS_恒仔阅读 6,791评论 1 6
  • 往手上砍出裂口,芽才能伸出来,黑色的,带着刀口向上爬,一路上割开了新的口子,伸出新的芽。右边的脸朝地上掉,镜子里看...
    U0阅读 1,755评论 0 2