在swift中有指定初始值设定项的概念(我认为是#34;普通"我们从其他语言中知道的构造函数)。
但是还有一个名为Convenience Initializer的东西,我知道怎么写,但是我不知道这一点
至于,如果我理解正确,你可以在不写关键字convenience
的情况下实现同样的目的吗?
答案 0 :(得分:1)
据我所知,这些初始化者的唯一要点就是方便。有时会发生这种情况,我们经常需要一遍又一遍地创建一些具有相同参数的对象。在这种情况下,我们可以添加另一个init方法,该方法占用更少的参数,其余的则是硬编码的。
例如,某些Logger类
init(type: LoggerType, filepath: String, configurations: LoggerConfig, etc.)
可能我们经常使用具有相同参数的记录器。为避免重复代码,我们可以添加一个带有一些默认值的便利初始化器
convenience init(){
self.init(type: LoggerType.SomeType, filepath: "/log", configurations: LoggerConfig.Default)
}
答案 1 :(得分:0)
实际上很容易理解它们:它们是带有默认参数的初始值设定项。
来自docs:
便利初始化程序是次要的,支持类的初始化程序。您可以定义一个便捷初始值设定项,以便从与便捷初始化程序相同的类中调用指定的初始值设定项,并将某些指定的初始值设定项参数设置为默认值。您还可以定义一个便捷初始值设定项,以便为特定用例或输入值类型创建该类的实例。
示例:
class A {
var a: Int
var b : Int
init() {
a = 0
b = 0
}
/*convenience*/ init(a: Int) {
self.init()
self.a = a
}
}
在上述情况下,您无法调用self.init()
,您已使用convenience
关键字标记初始值设定项,否则将是编译器错误。所以你不能从同一个类中链接两个指定的初始化器。