1.首先创建一个Person的类 继承 NSObject类
//
// Person.swift
// 008-构造函数
//
// Created by 庄壮勇 on 2018/1/8.
// Copyright © 2018年 Personal. All rights reserved.
//
import UIKit
/**
1. 给自己的属性分配空间并且设置初始值
2.调用父类的构造函数,给父类的属性分配空间设置初始值
NSObject 没有属性,只有一个成员变量 'isa'
*/
// 1.Class 'Person' has no initializer
// Person 类没有初始化器 s, 构造函数,可以有多个,默认的是init
class Person: NSObject {
var name: String
// 2. Overriding declaration requires an 'override' keyword
// 重写 -> 父类有这个方法,子类重新实现,需要override关键字
// 3. Property 'self.name' not initialized at implicitly generated super.init call
// implicitly(隐式生成的 super.init)调用分类的构造函数之前,属性 self.name 没有被初始化
override init () {
print ( "Person init" )
name = "zhang"
// 4.Property 'self.name' not initialized at super.init call
// 在调用父类 super.init 提示给self.name 初始化 -> 分配空间,设置初始值!
super . init ()
//name = "zhang"
// Person.swift
// 008-构造函数
//
// Created by 庄壮勇 on 2018/1/8.
// Copyright © 2018年 Personal. All rights reserved.
//
import UIKit
/**
1. 给自己的属性分配空间并且设置初始值
2.调用父类的构造函数,给父类的属性分配空间设置初始值
NSObject 没有属性,只有一个成员变量 'isa'
*/
// 1.Class 'Person' has no initializer
// Person 类没有初始化器 s, 构造函数,可以有多个,默认的是init
class Person: NSObject {
var name: String
// 2. Overriding declaration requires an 'override' keyword
// 重写 -> 父类有这个方法,子类重新实现,需要override关键字
// 3. Property 'self.name' not initialized at implicitly generated super.init call
// implicitly(隐式生成的 super.init)调用分类的构造函数之前,属性 self.name 没有被初始化
override init () {
print ( "Person init" )
name = "zhang"
// 4.Property 'self.name' not initialized at super.init call
// 在调用父类 super.init 提示给self.name 初始化 -> 分配空间,设置初始值!
super . init ()
//name = "zhang"
}
}
2.创建一个Student类继承于Person类
//
// Student.swift
// 008-构造函数
//
// Created by 庄壮勇 on 2018/1/8.
// Copyright © 2018年 Personal. All rights reserved.
//
import UIKit
class Student: Person {
/// 学号
var no: String
// 重写 person 的构造函数! 父类方法不能满足需求
override init () {
print ( "student init" )
no = "001"
super . init ()
// Student.swift
// 008-构造函数
//
// Created by 庄壮勇 on 2018/1/8.
// Copyright © 2018年 Personal. All rights reserved.
//
import UIKit
class Student: Person {
/// 学号
var no: String
// 重写 person 的构造函数! 父类方法不能满足需求
override init () {
print ( "student init" )
no = "001"
super . init ()
}
}
3.在ViewController上调用
//
// ViewController.swift
// 008-构造函数
//
// Created by 庄壮勇 on 2018/1/8.
// Copyright © 2018年 Personal. All rights reserved.
//
import UIKit
/**
在Swift 中,默认同一个项目中(同一个命名空间下),所有的类都是共享的,可以直接访问,不需要import
所有对象的属性 var, 也可以直接访问到
*/
class ViewController: UIViewController {
override func viewDidLoad() {
super . viewDidLoad ()
// 实例化 person
// () -> alloc/init
// Swift 中对应一个函数 init() 构造函数
// 作用: 给成员变量分配空间,初始化成员变量
// let p = Person()
// print(p.name)
let s = Student ()
print (s. name + "-----" + s. no )
}
}
// ViewController.swift
// 008-构造函数
//
// Created by 庄壮勇 on 2018/1/8.
// Copyright © 2018年 Personal. All rights reserved.
//
import UIKit
/**
在Swift 中,默认同一个项目中(同一个命名空间下),所有的类都是共享的,可以直接访问,不需要import
所有对象的属性 var, 也可以直接访问到
*/
class ViewController: UIViewController {
override func viewDidLoad() {
super . viewDidLoad ()
// 实例化 person
// () -> alloc/init
// Swift 中对应一个函数 init() 构造函数
// 作用: 给成员变量分配空间,初始化成员变量
// let p = Person()
// print(p.name)
let s = Student ()
print (s. name + "-----" + s. no )
}
}