🪶
Swiftで構造体を配列に格納した書き方 [] () とは?
Tips💡
Swiftのstructをarrayに格納する書き方で、[User()]
と [User]()
の書き方の違いがわからなかった🤦
試しにコードを書いてみて実行してみると、[User()]
はインスタンスが2個生成されて、[User]()
はインスタンスが1個しか生成されなかった???
struct UserState {
var id: String
var name: String
}
struct AnimalState {
var id: String?
var name: String?
}
var userState = [UserState]()
userState.append(UserState(id: "1111", name: "icchy"))
print(userState)
print(userState.count)
var animalState = [AnimalState()]
animalState.append(AnimalState(id: "2222", name: "Dog"))
print(animalState)
print(animalState.count)
Github Copilotに聞いてみた
AnimalStateの配列animalStateが初期化される際に、AnimalState()という形でデフォルトのインスタンスが生成されています。そのため、animalState.append(AnimalState(id: "2222", name: "Dog"))を実行した後でも、配列には2つのインスタンスが存在します。
配列を初期化する際には、[]を使用して空の配列を作成することが一般的です。以下のように修正すると、期待通りの結果が得られます。
nil許容しなくてもエラー出ないので、構造体のプロパティの?は消します
struct AnimalState {
var id: String
var name: String
}
var animalState = [AnimalState]()
animalState.append(AnimalState(id: "2222", name: "Dog"))
print(animalState)
print(animalState.count)
[修正後の実行結果]
最後に
Swiftのコード書くの慣れてないので、独特な構文を理解しようと毎日励んでおります🏃♀️
ログ出すまで、インスタンスが1回なのか2回なのか生成される違い気づかなかったです。
Discussion