Init with default vs convenience initializers

时间:2015-03-15 09:56:33

标签: swift

init与默认值和调用方便初始化之间有什么区别吗?我试着找出何时应该使用方便而不是默认的init。

class Food
 {
    var name :String

    init(name : String = "Unknow")
    {
        self.name = name
    }
 }

而且:

 class Food
 {
    var name :String

    init(name : String)
    {
        self.name = name
    }

    convenience init()
    {
        self.init(name : "Unkow")
    }
 }

1 个答案:

答案 0 :(得分:1)

对于类的用户来说,方便初始化器比具有默认值的指定初始化器更容易,因为Xcode通过自动完成列出了两个初始化器。

使用默认值的指定初始值设定项的自动完成:

Screenshot with a default value

指定初始化程序和便捷初始化程序的自动完成:

Screenshot with a convenience initializer

截图是使用Xcode 6.2拍摄的。除非Xcode支持默认值的自动完成,否则便利初始化程序对用户来说更容易,特别是如果您为人们设计框架。

便利初始化器的缺点是,正如Kelvin在他的评论中提到的,你不能使用子类初始化器中的便利初始化器。