在 swift 中,构造函数的要求比较严格,而我们聊的这三个关键字都于构造函数相关!
一、关键字说明
- designated(中文含义:指定的) :它指的是我们定义的公开的构造函数;公开的构造函数至少有一个,也可以有多个;
- convenience(中文含义:便利的):我们可以用该关键字来扩展(即新增)构造函数,因此是修饰构造函数的,但需要注意几点:
- 必需在同一个类中使用;
- 必需调用一个 designated 构造函数,调用时使用的是 self.init,而不是 super.init;
- 子类无法重载被 convenience 修饰的构造方法;
- required(中文含义:必要的) :含义很直白,即子类必需要实现父类指定的构造函数;
**关键字 designated 和 convenience 修饰构造函数的关系:**
二、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
当我们重载People
的init(_ name: String, age: Int, sexy: Int)
方法时,xcode
会马上提示如下错误:
然后,我们点击Fix
后,xcode 自动添加如下代码:
添加点说明注释,代码如下:
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