回答編集履歴

1

Stringの配列をstructの配列にしたコードを追記しました。

2022/07/23 23:29

投稿

退会済みユーザー
test CHANGED
@@ -76,3 +76,72 @@
76
76
  }
77
77
  ```
78
78
 
79
+ ---
80
+
81
+ コメントありがとうございます。
82
+ 追記です。
83
+
84
+ > structでまとめるとはどういうことでしょうか?
85
+
86
+ nameとdateをstructで1行のデータにまとめる感じです。
87
+ 次のようなイメージでしょうか。
88
+
89
+ ```swift
90
+ import SwiftUI
91
+ struct ContentView: View {
92
+ var array: [SampleStruct] = [
93
+ SampleStruct(name: "玉ねぎ", date: "2022/7/25"),
94
+ SampleStruct(name: "じゃがいも", date: "2022/7/24"),
95
+ SampleStruct(name: "にんじん", date: "2022/7/26"),
96
+ SampleStruct(name: "牛肉", date: "2022/7/27"),
97
+ SampleStruct(name: "きのこ", date: "2022/7/28"),
98
+ ]
99
+ @State private var searchText = ""
100
+ var body: some View {
101
+ VStack {
102
+ NavigationView {
103
+ List {
104
+ ForEach(searchResults, id: \.self) { name in
105
+ Text(name)
106
+ }
107
+ }
108
+ .searchable(text: $searchText, prompt: "食材の検索")
109
+ .keyboardType(.default)
110
+ .navigationTitle("全ての食材")
111
+ }
112
+ .navigationViewStyle(StackNavigationViewStyle())
113
+ List(0 ..< sortedArray.count, id:\.self) { item in
114
+ Text(sortedArray[item].name)
115
+ }
116
+ }
117
+ }
118
+ var searchResults: [String] {
119
+ let nameArray = array.map({ $0.name })
120
+ if searchText.isEmpty {
121
+ return nameArray
122
+ } else {
123
+ return nameArray.filter{ $0.contains(searchText) }
124
+ }
125
+ }
126
+ var sortedArray: [SampleStruct] {
127
+ array.sorted(by: { $0.formattedDate < $1.formattedDate })
128
+ }
129
+ }
130
+ struct SampleStruct {
131
+ var name: String
132
+ var date: String
133
+ var formattedDate: Date {
134
+ dateFromString(string: date, format: "y/M/d")
135
+ }
136
+ func dateFromString(string: String, format: String) -> Date {
137
+ let formatter: DateFormatter = DateFormatter()
138
+ formatter.calendar = Calendar(identifier: .gregorian)
139
+ formatter.dateFormat = format
140
+ return formatter.date(from: string)!
141
+ }
142
+ }
143
+ ```
144
+
145
+ SwiftUIのチュートリアルを一通りやってみるのも良いかもしれませんね。
146
+ https://developer.apple.com/tutorials/swiftui/building-lists-and-navigation
147
+