便利初始化器的用例是什么?

时间:2015-08-20 17:59:47

标签: ios swift initialization swift2 convenience-methods

在swift中有指定初始值设定项的概念(我认为是#34;普通"我们从其他语言中知道的构造函数)。 但是还有一个名为Convenience Initializer的东西,我知道怎么写,但是我不知道这一点 至于,如果我理解正确,你可以在不写关键字convenience的情况下实现同样的目的吗?

2 个答案:

答案 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关键字标记初始值设定项,否则将是编译器错误。所以你不能从同一个类中链接两个指定的初始化器。