Designated,Convenience 和 Required

这里写图片描述
这里写图片描述

Swift 有了超级严格的初始化方法。一方面,Swift 强化了 designated 初始化方法的 地位。Swift 中不加修饰的 init 方法都需要在方法中保证所有非 Optional 的实例变量被 赋值初始化,而在子类中也强制 (显式或者隐式地) 调用 super 版本的 designated 初始化, 所以无论如何走何种路径,被初始化的对象总是可以完成完整的初始化的。

class ClassA {
let numA: Int
init(num: Int) {
numA = num
} }
class ClassB: ClassA {
let numB: Int
override init(num: Int) {
numB = num + 1
super.init(num: num)
}
}
在上面的示例代码中,注意在 init 里我们可以对 let 的实例常量进行赋值,这是初始 化方法的重要特点。在 Swift 中 let 声明的值是不变量,无法被写入赋值,这对于构建 线程安全的 API 十分有用。而因为 Swift 的 init 只可能被调用一次,因此在 init 中我 们可以为不变量进行赋值,而不会引起任何线程安全的问题。
与 designated 初始化方法对应的是在 init 前加上 convenience 关键字的初始化方法。这 类方法是 Swift 初始化方法中的“二等公民”,只作为补充和提供使用上的方便。所有 的 convenience 初始化方法都必须调用同一个类中的 designated 初始化完成设置,另外 convenience 的初始化方法是不能被子类重写或者是从子类中以 super 的方式被调用的。
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
子类的方法调用的是父类designated的方法
看下面的例子:
只要在子类中实现重写了父类 convenience 方法所需要的 init 方法的话, 我们在子 类中就也可以使用父类的 convenience 初始化方法了。比如在上面的代码中,我们在 ClassB 里实现了 init(age: Int) 的重写。这样,即使在 ClassB 中没有 bigNum 版本的 convenience init(bigNum: Bool),我们仍然还是可以用这个方法来完成子类初始化:
这里写图片描述

 override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
       let tig = Tiger(bigNum: false)
        print(tig.name)
    }

因此进行一下总结,可以看到初始化方法永远遵循以下两个原则:
1. 初始化路径必须保证对象完全初始化,这可以通过调用本类型的 designated 初始 化方法来得到保证;
2. 子类的 designated 初始化方法必须调用父类的 designated 方法,以保证父类也完成 初始化。
3.
对于某些我们希望子类中一定实现的 designated 初始化方法, 我们可以通过添加 required 关键字进行限制, 强制子类对这个方法重写实现。这样的一个最大的好处 是可以保证依赖于某个 designated 初始化方法的 convenience 一直可以被使用。一个现 成的例子就是上面的 init(bigNum: Bool):如果我们希望这个初始化方法对于子类一定 可用,那么应当将 init(age: Int) 声明为必须,这样我们在子类中调用 init(bigNum: Bool) 时就始终能够找到一条完全初始化的路径了:

这里写图片描述

另外需要说明的是,其实不仅仅是对 designated 初始化方法,对于 convenience 的初始 化方法,我们也可以加上 required 以确保子类对其进行实现。这在要求子类不直接使 用父类中的 convenience 初始化方法时会非常有帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自古以来的短板,有效的提升管理的效率和业务水平。传统的管理模式,时间越久管理的内容越多,也需要更多的人来对数据进行整理,并且数据的汇总查询方面效率也是极其的低下,并且数据安全方面永远不会保证安全性能。结合数据内容管理的种种缺点,在互联网时代都可以得到有效的补充。结合先进的互联网技术,开发符合需求的软件,让数据内容管理不管是从录入的及时性,查看的及时性还是汇总分析的及时性,都能让正确率达到最高,管理更加的科学和便捷。本次开发的高校科研信息管理系统实现了操作日志管理、字典管理、反馈管理、公告管理、科研成果管理、科研项目管理、通知管理、学术活动管理、学院部门管理、科研人员管理、管理员管理等功能。系统用到了关系型数据库中王者MySql作为系统的数据库,有效的对数据进行安全的存储,有效的备份,对数据可靠性方面得到了保证。并且程序也具备程序需求的所有功能,使得操作性还是安全性都大大提高,让高校科研信息管理系统更能从理念走到现实,确确实实的让人们提升信息处理效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值