swift-26构造函数 (重写构造函数)

我以前做的swift笔记, 之前都是整理在onenote上, 最近想到整理出博客. 也方便自己查找, 可以当做自己的一份文档.

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        //实例化person
        // () 等于 alloc init 
        // swift 中对应一个函数的 init() 构造函数
        // 作用: 给成员变量分配空间 初始化成员变量
//        let p = Person()
//        print(p.name)
        let s = Student()
        print("\(s.no) ~~~~ \(s.name)")
    }

}
复制代码

import UIKit

/**
 必须属性的构造过程: 重写构造函数中, 先给自己舒心分配空间并且设置初始值, 再调用父类的 构造函数 
 1给自己的属性分配空间并且设置初始值
 2调用父类的'构造函数', 给父类的属性分配空间设置初始值
  NSObject 没有属性 只有一个成员变量 isa
 */

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 关键字
    父类方法满足不了子类的需求 , 重写来扩展需求
    */
    
    
}
复制代码

import UIKit

class Student: Person {
    var no: String
    override init() {
        print("student init")
        no = "001"
        super.init()
    }
}
复制代码

#import "Book.h"

@interface Book()

@property (nonatomic, copy) NSString *bookName;

@end

@implementation Book

- (instancetype)init
{
    self = [super init];
    if (self) {
        _bookName = @"iPhone";
    }
    return self;
}


@end
复制代码

转载于:https://juejin.im/post/5b963972e51d450ea401aa9a

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值