如何自动为Swift类创建初始化程序?

Bha*_*ain 9 struct model initialization ios swift

更新: 使用结构而不是类.结构在很多方面都有更好的自己的初始化器.

这是我的模特课.是否可以init自动创建方法?每次我必须逐个初始化所有变量,这需要花费大量时间.

class Profile {

    var id: String
    var name: String
    var image: String

    init(id: String, name: String, image: String) {
        self.id = id
        self.name = name
        self.image = image
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望self.id = id和其他变量自动初始化.

J. *_*Doe 22

我们可以使用以下工具来做到这一点:

xCode Version 10.1 (10B61)
Toolchain: Swift Development Snapshot 2018-12-25 (a) // Not sure if the toolchain matters.
Run Code Online (Sandbox Code Playgroud)

考虑下面的类(或结构如果关键字临时更改structclass后重构设置回struct):

class MyClass {
    let myIntProperty: Int
    let myStringProperty: String
    let myOptionalStringProperty: String?
    let myForcedUnwrappedOptionalStringProperty: String!
}
Run Code Online (Sandbox Code Playgroud)

前往xCode和:

  1. 双击班级名称
  2. 右键点击
  3. 重构
  4. 生成成员初始化器

以上步骤如下所示:

在此处输入图片说明

片刻之后,xCode生成了该初始化器:

internal init(myIntProperty: Int, myStringProperty: String, myOptionalStringProperty: String?, myForcedUnwrappedOptionalStringProperty: String?) {
    self.myIntProperty = myIntProperty
    self.myStringProperty = myStringProperty
    self.myOptionalStringProperty = myOptionalStringProperty
    self.myForcedUnwrappedOptionalStringProperty = myForcedUnwrappedOptionalStringProperty
}
Run Code Online (Sandbox Code Playgroud)

  • 这很有效,但请注意,它仅适用于 `class` 声明,而不适用于 `struct` 声明。 (2认同)
  • 好吧,确实不适用于结构,但您可以暂时将“struct”更改为“class”,生成初始化程序并再次使其成为“struct”;)。 (2认同)

Mor*_*mer 13

你不能 即使使用struct,由于struct'init'的内部访问级别,您在处理模块时也可能陷入困境。

但是,有一个方便的Xcode插件:https : //github.com/rjoudrey/swift-init-generatorhttps://github.com/Bouke/SwiftInitializerGenerator

感谢插件的创造者。

更新资料

class当且仅当您具有uninitialized属性时:Xcode将允许在以下位置生成初始化程序

右键单击>重构>“生成成员初始化”

注意:如果您已经初始化了类属性,则不会出现“ Generate Memberwise Initialization” xcode生成成员初始化


Pau*_*tos 7

不,课程没有这样的功能.但是,如果您将其设计为a struct,则可以免费获得成员初始化程序 - 假设您没有自己定义其他初始化程序.

例如:

struct Point {
    var x: Float
    var y: Float
}
...
var p = Point(x: 1, y: 2)
Run Code Online (Sandbox Code Playgroud)

来自Swift编程语言书:

如果结构类型没有定义任何自己的自定义初始值设定项,它们会自动接收成员初始值设定项.与默认初始值设定项不同,即使结构存储的属性没有默认值,该结构也会接收成员初始值设定项.

成员初始化程序是初始化新结构实例的成员属性的简便方法.可以通过名称将新实例的属性的初始值传递给成员初始值设定项.

  • 我会赞成它,因为你提到了一些我不知道的事情。但是,我仍然在寻找课程如何实现这一目标的答案。也许有人为它创建了一个工具,所以它可以直接使用。一定有办法! (2认同)