Xcode 12 の SwiftUI + Core Data のプロジェクトテンプレートが不完全
新規プロジェクト作成でプロジェクトテンプレートから iOS App を選択
Interface SwiftUI, Life Cycle SwiftUI App, Language Swift を選択して Use Core Data をチェック
作成される初期画面 ContentView
の body
とビルド結果は以下
var body: some View { List { ForEach(items) { item in Text("Item at \(item.timestamp!, formatter: itemFormatter)") } .onDelete(perform: deleteItems) } .toolbar { #if os(iOS) EditButton() #endif Button(action: addItem) { Label("Add Item", systemImage: "plus") } } }
画面が真っ白で何も表示されない。
1つ目の原因は NavigationView
の指定が無いこと。toolbar
のコンテンツを表示するには NavigationView
が必要なのでまず body
の中身のルートの List
を NavigationView
に入れる。
var body: some View { NavigationView { List { // 省略 } .toolbar { // 省略 } } }
編集ボタンが表示された。でもまだ項目追加のプラスボタンが表示されていない。
次に toolbar
のコンテンツの各ボタンを ToolbarItem
に入れる。引数の placement
は今回は navigationBarLeading
navigationBarTrailing
を使用。
var body: some View { NavigationView { List { // 省略 } .toolbar { #if os(iOS) ToolbarItem(placement: .navigationBarLeading) { EditButton() } #endif ToolbarItem(placement: .navigationBarTrailing) { Button(action: addItem) { Label("Add Item", systemImage: "plus") } } } } }
プラスボタンを押すと後はテンプレートの実装通り動作しリストが表示される。
これから初めて Swift/SwiftUI をやるぞって時にテンプレートがこの有様だとスタートでつまづいてしまうのでヘルプになればと思いシェアです*1
*1:このテンプレートの不具合が気になった人は Feedback Assistant にレポートしてくれると幸い