Swift3.0 -- 构造函数

本文深入探讨了Swift语言中构造函数的使用方式,包括初始化过程、属性设置及继承关系中的构造处理。通过具体代码示例,介绍了如何在子类中调用父类构造器并为自身属性设置初始值。
//
//  ViewController.swift

import UIKit

/**
 在swift中,同一个项目中(同一个命名空间),所有的类默认都是共享的,不需要引用,可以直接访问,不需要import
 所有对象的属性 var,也可以直接访问到
 */

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        //实例化一个类
        // () -> alloc init
//        let p = Person.init(name: "老王");
        
//        print(p.name);
        let p = Student(name: "老王", num: "10");
        print("\(p.name + p.num)");
        
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

//
//  Person.swift

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

class Person: NSObject {

    var name: String
    
    // 重写  父类有这个方法,需要扩展
    override init() {
        // 问题1:name所有的初始值都是 zhang!
        name = "zhang";
        print("Person init");

        super.init();
    }
    
    // 重载  函数名相同,参数和个数不同
    // 给自己的属性,在外部设置值
    // oc没有重载
    init(name: String) {
        self.name = name;
        super.init();
    }
    
}
//
//  Student.swift

import UIKit

class Student: Person {
    var num: String;
    
    init(name: String, num: String) {
        self.num = num;
        
        //调用父类的构造函数,给name初始化
        super.init(name: name);
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值