iOS Swift5 构造函数分析(一):关键字 designated、convenience、required

iOS Swift5 构造函数分析(一):关键字 designated、convenience、required一、关键字说明designated(中文含义:指定的):它指的是我们定义的公开的构造函数;公开的构造函数至少有一个,也可以有多个;convenience(中文含义:便利的):我们可以用该关键字来扩展(

在 swift 中,构造函数的要求比较严格,而我们聊的这三个关键字都于构造函数相关!

一、关键字说明

  1. designated(中文含义:指定的) :它指的是我们定义的公开的构造函数;公开的构造函数至少有一个,也可以有多个;
  2. convenience(中文含义:便利的):我们可以用该关键字来扩展(即新增)构造函数,因此是修饰构造函数的,但需要注意几点:
    • 必需在同一个类中使用;
    • 必需调用一个 designated 构造函数,调用时使用的是 self.init,而不是 super.init;
    • 子类无法重载被 convenience 修饰的构造方法;
  3. required(中文含义:必要的) :含义很直白,即子类必需要实现父类指定的构造函数;

**关键字 designated 和 convenience 修饰构造函数的关系:**

initializerDelegation.png

二、Demo演示

2.1、定义基类 People

class People {
    var name: String
    var age : Int
    var sexy: Int
    
    /// designated
    /// 指定一个构造函数
    init(_ name: String, age: Int, sexy: Int) {
        self.name = name
        self.age = age
        self.sexy = sexy
    }

    convenience init(_ name: String, age: Int) {
        self.init(name, age: age, sexy: 0)
    }
    
    required init(_ name: String) {
        self.name = name
        self.age = 0
        self.sexy = 0
    }
}

2.2、定义子类 Student

当我们重载Peopleinit(_ name: String, age: Int, sexy: Int)方法时,xcode会马上提示如下错误:

cons-required.png

然后,我们点击Fix后,xcode 自动添加如下代码:

intros.png

添加点说明注释,代码如下:

class Student: People {
    // 父类的 designated 构造方法,子类可以进行重载
    override init(_ name: String, age: Int, sexy: Int) {
        super.init(name, age: age, sexy: sexy)
    }
    
    // 父类的 convenience 构造方法,子类无法继承
    
    // 父类的 required 构造方法,子类必须实现
    required init(_ name: String) {
        fatalError("init(_:) has not been implemented")
    }
}

今天的文章iOS Swift5 构造函数分析(一):关键字 designated、convenience、required分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/18609.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注