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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值