7

我想为我的类创建可能看起来像这样的初始化:

initWithSomeMode { // Not compilable
    self.init()
    self.customSetup()
}

当然上面的代码是行不通的,我只是想展示我想要实现的目标。

我只能在 Swift 类中看到方便的 init,但在那种情况下我需要添加参数,但我不需要它们。

所以,我可以通过方便的 init 来实现这一点,如下所示:

convenience init(foo: String?) {
    self.init()
    self.customSetup()
}

有没有办法在没有参数的情况下创建自定义初始化?

4

3 回答 3

6

您需要创建一个static方法:

static func initWithSomeMode() -> YourClass {
    let obj = YourClass()
    obj.someCustomSetup()
    return obj
}

然后你可以这样做:

let yourClass = YourClass.initWithSomeMode()
于 2018-05-11T09:49:28.397 回答
3

也是一种解决方法,但我倾向于使用这个:

convenience init(withSomeMode: Void) {
    self.init()
    self.customSetup()
}

接着:

YourClass.init(withSomeMode: ())

它比静态方法有一些优势,比如更容易子类化。但是,是的,仍然是一种解决方法。

于 2018-10-24T10:29:53.680 回答
0

在当前的 Swift 中,你只能编写一个遵循 Swift 初始化过程和规则的无参数方法:init()

要自定义初始化,您必须提供命名输入参数:init(with: String)

没有办法在左边写一个无参数的“命名初始化器”,(并且仍然让它是一个遵循init规则的初始化函数。之类的东西是initSpecial()行不通的。

初始化器

调用初始化程序来创建特定类型的新实例。在最简单的形式中,初始化器就像一个没有参数的实例方法,使用 init 关键字编写。

自定义初始化

您可以使用输入参数和可选属性类型自定义初始化过程,或者通过在初始化期间分配常量属性,如以下部分所述。

https://docs.swift.org/swift-book/LanguageGuide/Initialization.html

于 2020-03-18T21:57:58.633 回答