更新 使用结构而不是类。结构在很多方面都更好,它有自己的初始化器。
这是我的模特课。是否可以自动创建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
和其他变量自动初始化。
答案 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
并:
以上步骤如下:
一秒钟之后,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-generator或https://github.com/Bouke/SwiftInitializerGenerator
感谢他们的创作者
答案 3 :(得分:-1)
在新版本的Xode中。
首先,单击包含类“ yourclassname {”的行,然后右键单击并选择“ Show Code Actions”。然后,您可以点击“ Generate Memberwise Initializer”。就是这样。