0

配列が表示されるフォームがあります。各行は、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 である理由を教えていただければ幸いです。

ありがとうございました。

4

0 に答える 0