swift-28构造函数(重载构造函数)
【swift-28构造函数(重载构造函数)】我以前做的swift笔记, 之前都是整理在onenote上, 最近想到整理出博客. 也方便自己查找, 可以当做自己的一份文档.
文章图片
image.png
import UIKitclass ViewController: UIViewController {override func viewDidLoad() {
super.viewDidLoad()
//let p = Person(name: "老王")
//
//print("\(p.name)")let s = Student(name: "小王", no: "002")
print("\(s.name) \(s.no)")
}}
文章图片
image.png
import UIKit/**
必须属性的构造过程: 重写构造函数中, 先给自己舒心分配空间并且设置初始值, 再调用父类的 构造函数
1给自己的属性分配空间并且设置初始值
2调用父类的'构造函数', 给父类的属性分配空间设置初始值
NSObject 没有属性 只有一个成员变量 isa
3 如果重载了构造函数 并且没有实现父类init 方法 系统不再提供init() 构造函数(默认是会有的)
- 因为 默认的构造函数 不能给本类的属性分配空间
*/class Person: NSObject {
var name: String
//1Class 'Person' has no initializers 类Person 没有初始化器s 可以有多个 默认的是init
//2override 重写: 父类有这个方法 子类重新编写父类方法的实现 需要override 关键字
//3Property '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 初始化 -> 分配空间 设置初始值!
//print("Person init")
//name = "zhang"
//super.init()
////name = "li"
//}
/**
override 重写: 父类有这个方法 子类重新编写父类方法的实现 需要override 关键字
父类方法满足不了子类的需求 , 重写来扩展需求
*//**
重载
函数名相同, 但参数和个数不同
重载可以给自己的属性从外部设置初始值!
oc 没有重载oc 用 initWithXXX
*/
init(name: String) {
//使用参数 设置给属性
self.name = name
super.init()
}}
文章图片
image.png
import UIKitclass Student: Person {
var no: String
init(name: String, no:String) {
self.no = no
super.init(name: name)
}
}
推荐阅读
- 一起来学习C语言的字符串转换函数
- C语言字符函数中的isalnum()和iscntrl()你都知道吗
- C语言浮点函数中的modf和fmod详解
- C语言中的时间函数clock()和time()你都了解吗
- 概率论/统计学|随机变量 的 分布函数 与 概率密度函数 的区别
- vue组件中为何data必须是一个函数()
- iOS-Swift-map|iOS-Swift-map filter reduce、函数式编程
- R语言|R语言 函数
- 2018-05-30闭包和函数
- 函数的一些东西