質問編集履歴

6

誤字がありました。

2020/09/02 19:08

投稿

SadajiroOkuno
SadajiroOkuno

スコア4

test CHANGED
File without changes
test CHANGED
@@ -290,9 +290,11 @@
290
290
 
291
291
  var editDic2 = [schedules]()
292
292
 
293
+ var editDicAll = [schedules]()
294
+
293
295
  var editDic = [schedules]()
294
296
 
295
-
297
+    
296
298
 
297
299
 
298
300
 
@@ -332,7 +334,7 @@
332
334
 
333
335
  for num in 0..<editDic.count{
334
336
 
335
- dateArray.append(v[num].date)
337
+ dateArray.append(editDic[num].date)
336
338
 
337
339
  }
338
340
 

5

codeを追加しました。

2020/09/02 19:08

投稿

SadajiroOkuno
SadajiroOkuno

スコア4

test CHANGED
File without changes
test CHANGED
@@ -259,3 +259,207 @@
259
259
 
260
260
 
261
261
  ![イメージ説明](ac8802b46805147970cbb7a240b506f2.png)
262
+
263
+
264
+
265
+
266
+
267
+
268
+
269
+
270
+
271
+ ********************************************************
272
+
273
+ 解決致しました!
274
+
275
+ TsukubaDepotさんのリンクを参照しました。
276
+
277
+ https://teratail.com/questions/288703
278
+
279
+ コード記載は****マークで囲ってあります。
280
+
281
+ 解決したコード
282
+
283
+ ```ここに言語を入力
284
+
285
+ var schedule = [Date: [schedules]]()
286
+
287
+ var dateOrder = [Date]()
288
+
289
+ var editDic1 = [schedules]()
290
+
291
+ var editDic2 = [schedules]()
292
+
293
+ var editDic = [schedules]()
294
+
295
+
296
+
297
+
298
+
299
+ func combineInfosToSingleArray(editDic:[schedules]){
300
+
301
+ self.editDic.removeAll()
302
+
303
+ self.editDicAll = editDic1 + editDic2
304
+
305
+ editDic = self.editDicAll.sorted { ( ldate, rdate) -> Bool in
306
+
307
+ return ldate.date < rdate.date
308
+
309
+ }
310
+
311
+ ****ここにcompletionを入れて、firebaseから読み込んだ2つの違うデータを
312
+
313
+                        一つの配列に入れてから、次の処理へ移行するようにしました***
314
+
315
+ setGrouping(editDic: editDic, completion: {
316
+
317
+ self.displaySectionOnTop(editDic: self.editDic)
318
+
319
+ })
320
+
321
+ *************************************************
322
+
323
+ tableView.reloadData()
324
+
325
+ }
326
+
327
+
328
+
329
+ func displaySectionOnTop(editDic:[schedules]){
330
+
331
+ var dateArray = [String]()
332
+
333
+ for num in 0..<editDic.count{
334
+
335
+ dateArray.append(v[num].date)
336
+
337
+ }
338
+
339
+ /****重複を消す****/
340
+
341
+ let duplicateDAOS:NSOrderedSet = NSOrderedSet(array: dateArray)
342
+
343
+ let stringArray = duplicateDAOS.array as! [String]
344
+
345
+ let scheduleArray = stringArray.sorted { ( lDate, rDate) -> Bool in
346
+
347
+ return lDate < rDate
348
+
349
+ }
350
+
351
+ print("スケジュール配列: ",scheduleArray)
352
+
353
+
354
+
355
+ let date = Date()
356
+
357
+ let today = dateFormatter.string(from: date)
358
+
359
+ if let index = scheduleArray.firstIndex(of: today){
360
+
361
+ let indexPath = IndexPath(row: 0, section: index)
362
+
363
+ DispatchQueue.main.async {
364
+
365
+ self.tableView.scrollToRow(at: indexPath, at: .top, animated: false)
366
+
367
+ }
368
+
369
+ }else{
370
+
371
+ print("本日 ((today)) 予定はありませんでした。")
372
+
373
+
374
+
375
+ let filteredScheduleArray = scheduleArray.filter({ element in element > today })
376
+
377
+ if let nextScheDate = filteredScheduleArray.first{
378
+
379
+
380
+
381
+ let index = filteredScheduleArray.firstIndex(of: nextScheDate)
382
+
383
+ let getNextSection = scheduleArray.count - filteredScheduleArray.count
384
+
385
+ let section = getNextSection + index!
386
+
387
+ let indexPath = IndexPath(row: 0, section: section)
388
+
389
+ DispatchQueue.main.async {
390
+
391
+ self.tableView.scrollToRow(at: indexPath, at: .top, animated: false)
392
+
393
+ print("次の直近の予定日は (nextScheDate) で、要素番号は (section) です。")
394
+
395
+ }
396
+
397
+ }else{
398
+
399
+ let filteredScheduleArray = scheduleArray.filter({ element in element < today })
400
+
401
+ if let lastDate = filteredScheduleArray.last{
402
+
403
+ let section = filteredScheduleArray.firstIndex(of: lastDate)
404
+
405
+ let indexPath = IndexPath(row:0,section: section!)
406
+
407
+ DispatchQueue.main.async {
408
+
409
+ self.tableView.scrollToRow(at: indexPath, at: .top, animated: false)
410
+
411
+ print("直近の予定はありませんでした。")
412
+
413
+ print("前回の予定は (lastDate) で、要素番号は (section!) です。")
414
+
415
+ }
416
+
417
+ }else{
418
+
419
+ print("登録されている予定は 0 件です")
420
+
421
+ }
422
+
423
+ }
424
+
425
+ }
426
+
427
+ tableView.reloadData()
428
+
429
+ }
430
+
431
+ ****こちらの関数で@escaping()->()と,下記にDispatchQueue.main.async{completion()}を追加しました****
432
+
433
+ func setGrouping(editDic:[schedules], completion: @escaping()->()){
434
+
435
+
436
+
437
+ schedule = Dictionary(grouping: editDic){ project -> Date in
438
+
439
+ let date = dateFormatter.date(from: project.date)
440
+
441
+ return date ?? Date()
442
+
443
+ }
444
+
445
+ .reduce(into:[Date:[schedules]]()) { dic, tuple in
446
+
447
+ dic[tuple.key] = tuple.value.sorted { $0.date < $1.date}
448
+
449
+ }
450
+
451
+ dateOrder = Array(schedules.keys).sorted{ $0 < $1}
452
+
453
+ ******こちら********
454
+
455
+       DispatchQueue.main.async {
456
+
457
+ completion()
458
+
459
+ }
460
+
461
+     ******************
462
+
463
+ }
464
+
465
+ ```

4

写真を追加

2020/09/02 19:05

投稿

SadajiroOkuno
SadajiroOkuno

スコア4

test CHANGED
File without changes
test CHANGED
@@ -220,7 +220,7 @@
220
220
 
221
221
  if filteredScheduleArray1.isEmpty == false{
222
222
 
223
- let nextSection = filteredScheduleArray1.startIndex
223
+ let nextSection = filteredScheduleArray1.startIndex + 1
224
224
 
225
225
  let indexPath = IndexPath(row: 0, section: nextSection)
226
226
 
@@ -255,3 +255,7 @@
255
255
  }
256
256
 
257
257
  ```
258
+
259
+
260
+
261
+ ![イメージ説明](ac8802b46805147970cbb7a240b506f2.png)

3

修正コードの追加

2020/08/31 07:35

投稿

SadajiroOkuno
SadajiroOkuno

スコア4

test CHANGED
File without changes
test CHANGED
@@ -165,3 +165,93 @@
165
165
  全て配列に入りきってから配列番号を取得しようと試みるのですが、呼び出しの場所を変えても状態は変わらず。
166
166
 
167
167
  改めてご教授頂ければと思います。よろしくお願いします。
168
+
169
+
170
+
171
+
172
+
173
+ 修正コードはこちら
174
+
175
+ ```ここに言語を入力
176
+
177
+ /****重複を消す****/
178
+
179
+ let duplicateDAOS:NSOrderedSet = NSOrderedSet(array: dateArray)
180
+
181
+ let stringArray = duplicateDAOS.array as! [String]
182
+
183
+ let scheduleArray = stringArray.sorted { ( lDate, rDate) -> Bool in
184
+
185
+ return lDate < rDate
186
+
187
+ }
188
+
189
+ print("予定日時配列: ",scheduleArray)
190
+
191
+
192
+
193
+ let date = Date()
194
+
195
+ let today = dateFormatter.string(from: date)
196
+
197
+ print("今日の日付: ",today)
198
+
199
+
200
+
201
+ let section = scheduleArray.firstIndex(of: today)
202
+
203
+ if section != nil{
204
+
205
+ let indexPath = IndexPath(row: 0, section: section ?? 0)
206
+
207
+ DispatchQueue.main.async {
208
+
209
+ self.tableView.scrollToRow(at: indexPath, at: .top, animated: false)
210
+
211
+ }
212
+
213
+ }else if section == nil{
214
+
215
+
216
+
217
+ let filteredScheduleArray1 = scheduleArray.filter({ element in element > today })
218
+
219
+ print("配列、次の予定日時が始めに来る: ",filteredScheduleArray1)
220
+
221
+ if filteredScheduleArray1.isEmpty == false{
222
+
223
+ let nextSection = filteredScheduleArray1.startIndex
224
+
225
+ let indexPath = IndexPath(row: 0, section: nextSection)
226
+
227
+ DispatchQueue.main.async {
228
+
229
+ self.tableView.scrollToRow(at: indexPath, at: .top, animated: false)
230
+
231
+ }
232
+
233
+ }else if filteredScheduleArray1.isEmpty == true{
234
+
235
+ let filteredScheduleArray2 = scheduleArray.filter({ element in element < today })
236
+
237
+ let preSection = filteredScheduleArray2.endIndex + 1
238
+
239
+ print("配列、消化した日程最終日が最後に来る: ",filteredScheduleArray2)
240
+
241
+ let indexPath = IndexPath(row: 0, section: preSection)
242
+
243
+ DispatchQueue.main.async {
244
+
245
+ self.tableView.scrollToRow(at: indexPath, at: .top, animated: false)
246
+
247
+ }
248
+
249
+ }
250
+
251
+ }
252
+
253
+ tableView.reloadData()
254
+
255
+ }
256
+
257
+ ```

2

写真を追加

2020/08/31 07:29

投稿

SadajiroOkuno
SadajiroOkuno

スコア4

test CHANGED
File without changes
test CHANGED
@@ -4,13 +4,13 @@
4
4
 
5
5
  いつも大変お世話になっております!
6
6
 
7
- TableViewに日付を昇順で並べています。
7
+ TableViewにsectionで日付を昇順で並べています。
8
8
 
9
- 起動したその日が2020/8/30とした場合、その日付のCellがTableViewの一番上に来るようにします。
9
+ 起動したその日が2020/8/30とした場合、その日付のsectionがTableViewの一番上に来るようにします。
10
10
 
11
- その日付がTableViewに存在するときは問題なく機能しましたが、その日付が存在しない場合、次の予定が一番上に来るように実装したいのです。
11
+ その日付が配列に存在するときは問題なく機能しましたが、配列に存在しない場合、次の予定が一番上に来るように実装したいのです。
12
12
 
13
-
13
+ ![イメージ説明](2ac0671a9b4e06a6180a69a5f146b088.png)
14
14
 
15
15
  ### 発生している問題・エラーメッセージ
16
16
 

1

誤字がありました。

2020/08/30 11:43

投稿

SadajiroOkuno
SadajiroOkuno

スコア4

test CHANGED
File without changes
test CHANGED
@@ -16,8 +16,6 @@
16
16
 
17
17
 
18
18
 
19
- ```
20
-
21
19
  下記のコードのように、もし今日の日付が配列の中の日付に一致しなかった場合は、
22
20
 
23
21
  filterを使って本日以降の日付を新しく配列を作り入れます。
@@ -30,11 +28,11 @@
30
28
 
31
29
 
32
30
 
33
- もっと賢いやり方があるのかもしれませんが、どなたかお時間ある時にご教授頂ければ大変たすかります。
31
+ もっと賢いやり方があるのかもしれませんが、どなたかご教授頂ければ大変たすかります。
34
32
 
35
33
  何卒よろしくお願いいたします。
36
34
 
37
- ```
35
+
38
36
 
39
37
 
40
38
 
@@ -148,11 +146,11 @@
148
146
 
149
147
  //let section = filteredScheduleArray.firstIndex(of: nextScheDate)
150
148
 
151
- これら2行をコメントアウトすると以下2枚の写真のように順番に配列に足されていくことが確認できますが、一番始めは[]からになってます。
149
+ これら2行をコメントアウトすると以下の写真のように順番に配列に足されていくことが確認できますが、一番始めは[]からになってます。
152
150
 
153
151
 
154
152
 
155
- ![イメージ説明](804ae52b3676971ea353f9919d3b3549.png)![イメージ説明](75d3a0182c8921c682a0a3d1e6ac9f2c.png)
153
+ ![イメージ説明](75d3a0182c8921c682a0a3d1e6ac9f2c.png)
156
154
 
157
155
 
158
156