PDATE:クラスではなく構造体を使用します。 Structは多くの点で優れており、独自のイニシャライザを持っています。
これは私のモデルクラスです。 init
メソッドを自動的に作成することは可能ですか?すべての変数を1つずつ初期化する必要があり、多くの時間がかかります。
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
およびその他の変数を自動的に初期化します。
UpdateXcode 11.4以降
refactor
(マウスの右クリックメニュー)を使用して、クラスと構造体memeberwise initializer
を生成できます。
注:struct
自動初期化子は内部にあります。モジュールを作成してpublic
にするときに、memeberwise initializer
を何を生成するかを指定できます。
右クリック>「リファクタリング」>「メンバーごとの初期化を生成」
古いXcodeの場合
Xcode用の便利なプラグインがあります: https://github.com/rjoudrey/Swift-init-generator または https://github.com/Bouke/SwiftInitializerGenerator
プラグイン作成者に感謝します。
これは、次のツールで実行できます。
Xcode Version 10.1 (10B61)
Toolchain: Swift Development Snapshot 2018-12-25 (a) // Not sure if the toolchain matters.
次のクラスが与えられた場合(または一時的にキーワードstruct
をclass
に変更し、リファクタリング後にstruct
に戻す場合の構造体):
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
}
いいえ、クラスにはそのような機能はありません。ただし、これをstruct
として設計すると、メンバーごとの初期化子が無料で得られます—他の初期化子を自分で定義しない場合。
例えば:
struct Point {
var x: Float
var y: Float
}
...
var p = Point(x: 1, y: 2)
The Swift Programming Languageの本から:
独自のカスタム初期化子を定義していない場合、構造体型はメンバーワイズ初期化子を自動的に受け取ります。デフォルトの初期化子とは異なり、デフォルト値を持たないプロパティが格納されている場合でも、メンバーワイズの初期化子を受け取ります。
メンバーごとの初期化子は、新しい構造体インスタンスのメンバープロパティを初期化する簡単な方法です。新しいインスタンスのプロパティの初期値は、メンバーごとの初期化子に名前で渡すことができます。
XCodeの新しいバージョン;
まず、クラス「yourclassname {」を含む行をクリックしてから、右クリックして「コードアクションの表示」を選択します。次に、[Generate Memberwise Initializer]をクリックします。以上です。