0

SwiftUI の ForEach ループで特定のテキストを表示するのに苦労しています。

ForEach で反復処理する配列があります。問題は、カレンダーで特定の日付が選択されているかどうかに関係なく、特定のテキストを表示する必要があることです。例えば:

ForEach(reminders) { reminder in 
    if(Calendar.current.isDate(reminder.beginDate, equalTo: selectedPassedDate) {
       HStack {
         Text("The Text for the specific day")
       } else {
         Text("The text for the unspecific day")
       }
    }
}

配列に 2 つ以上の要素がある場合、一致しない日のテキストが複数回表示されます (foreach 内にあるため)。これは理にかなっていますが、「指定されていない日」のテキストを多数ではなく 1 つだけ表示する方法を見つけようとしています。

他のテキストを表示するために単純なブール値を追加しようとしましたが、ボタンなどを使用せずに状態を変更することはできません..これを完全にプログラムで行う必要があります。また、else ステートメントをループの外に移動しましたが、ここでもセカンダリ テキストが現在の日付の選択に表示されています。

この問題を解決するにはどうすればよいですか? SwiftUIsビューに準拠しながらプログラムでboolを設定できる場合、これを解決できますが、方法がわかりません。

4

1 に答える 1

0

次のようなことを試すことができます:

class FirstTime: ObservableObject {
    var value = true
}

struct MyView: View {
    ...
    @State var firstTime = FirstTime()

    var body: some View {
    VStack {
        ForEach(reminders) { reminder in
            HStack {
                if (Calendar.current.isDate(reminder.beginDate, equalTo: selectedPassedDate) {
                    Text("The Text for the specific day")
                } else {
                    if firstTime.value {
                        showTextOnce()
                    }
                }
            }
        }
    }
}

func showTextOnce() -> some View {
    firstTime.value = false
    return Text("The text for the unspecific day")
} 
} 
于 2020-12-22T04:12:26.377 に答える