配列が表示されるフォームがあります。各行は、fullscreenCover を開くボタンです。
問題は、ボタンがトリガーされてシートが表示されるのは初めてで、この場合の都市のオブジェクトは nil です。
fullscreenCover の代わりにシートを使用する場合、またはフォームの代わりにリストまたは vstack を使用する場合も同じことが起こります。
import SwiftUI
struct City: Identifiable {
let id = UUID()
let name: String
let population: Int
}
struct ContentView: View {
let cities = [City(name: "Munich", population: 1500000), City(name: "San Diego", population: 1400000), City(name: "Sydney", population: 5300000), City(name: "London", population: 8900000)]
@State var showFullscreenCover = false
@State var selectedCity: City?
var body: some View {
NavigationView {
Form {
ForEach(cities) { city in
Button(city.name) {
selectedCity = city
showFullscreenCover.toggle()
}
}
}
.fullScreenCover(isPresented: $showFullscreenCover, onDismiss: {
selectedCity = nil
}) {
CityView(city: selectedCity)
}
.navigationTitle("City Population")
}
}
}
struct CityView: View {
var city: City?
@Environment(\.presentationMode) var presentationMode
var body: some View {
if let city = city {
NavigationView {
VStack {
Text("Population")
Text("\(city.population)")
}
.navigationTitle(city.name)
.navigationBarItems(leading:
Button("Cancel") {
presentationMode.wrappedValue.dismiss()
}
)
}
} else {
NavigationView {
Text("City object is nil")
.navigationBarItems(leading:
Button("Cancel") {
presentationMode.wrappedValue.dismiss()
}
)
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
.previewDevice("iPhone 12 Pro")
.colorScheme(.dark)
}
}
最初の呼び出しでオブジェクトが nil である理由を教えていただければ幸いです。
ありがとうございました。