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

时间:2017-04-06 12:40:48

标签: ios swift struct model initialization

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

这是我的模特课。是否可以自动创建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
    }
}

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

4 个答案:

答案 0 :(得分:10)

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

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

提供以下课程:

class MyClass {
    let myIntProperty: Int
    let myStringProperty: String
    let myOptionalStringProperty: String?
    let myForcedUnwrappedOptionalStringProperty: String!
}

转到xCode并:

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

以上步骤如下:

enter image description here

一秒钟之后,xCode生成了该初始化器:

internal init(myIntProperty: Int, myStringProperty: String, myOptionalStringProperty: String?, myForcedUnwrappedOptionalStringProperty: String?) {
    self.myIntProperty = myIntProperty
    self.myStringProperty = myStringProperty
    self.myOptionalStringProperty = myOptionalStringProperty
    self.myForcedUnwrappedOptionalStringProperty = myForcedUnwrappedOptionalStringProperty
}

答案 1 :(得分:7)

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

例如:

struct Point {
    var x: Float
    var y: Float
}
...
var p = Point(x: 1, y: 2)

来自 The Swift Programming Language book:

  

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

     

memberwise初始化程序是初始化新结构实例的成员属性的简便方法。可以按名称将新实例的属性的初始值传递给成员初始化程序。

答案 2 :(得分:4)

你不能。即使使用struct,由于结构的内部访问级别" init',因此在处理模块时可能会遇到问题。

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

感谢他们的创作者

答案 3 :(得分:-1)

在新版本的Xode中。

首先,单击包含类“ yourclassname {”的行,然后右键单击并选择“ Show Code Actions”。然后,您可以点击“ Generate Memberwise Initializer”。就是这样。

  1. First of all click line which contain class "yourclassname {"

  2. Right click and select "Show Code Actions".