質問編集履歴

1

3つ目のコードのif文が「if countB == checkCount {」になっていたので「if countB == checkCountB {」に直しました。

2020/10/13 00:35

投稿

unagimochimochi
unagimochimochi

スコア7

test CHANGED
File without changes
test CHANGED
@@ -132,19 +132,123 @@
132
132
 
133
133
  if countB == checkCountB {
134
134
 
135
+ checkCountB += 1
136
+
137
+ // 時間遅れに揺らぎ(0.5秒から1.0秒の間)を与える
138
+
139
+ let delay = Double.random(in: 0.5...1.0)
140
+
141
+ dispatchQueue.asyncAfter(deadline: .now() + delay) {
142
+
143
+ print("countB: (countB)")
144
+
145
+ countB += 1
146
+
147
+ }
148
+
149
+ }
150
+
151
+ }
152
+
153
+ ```
154
+
155
+
156
+
157
+ 以下がプリントされます。
158
+
159
+ ```
160
+
161
+ countB: 0
162
+
163
+ countB: 1
164
+
165
+ countB: 2
166
+
167
+ countB: 3
168
+
169
+ ```
170
+
171
+
172
+
173
+ このように、条件が無視されて処理が続くのはどのようなときなのか、
174
+
175
+ その対処法などありましたら教えていただきたく思います。
176
+
177
+
178
+
179
+
180
+
181
+ ### 具体的なこと
182
+
183
+
184
+
185
+ 質問内容は上記で以上なのですが、念のため実際に使っている部分も掲載します。
186
+
187
+ (ややこしいので読み飛ばしていただいても大丈夫だと思います)
188
+
189
+
190
+
191
+ データベースにIDを保存する処理([前回の質問](https://teratail.com/questions/297117))を、
192
+
193
+ 1人目、1人目が終わったら2人目……と順番にやりたかったので、以下のように書いています。
194
+
195
+
196
+
197
+ ```Swift
198
+
199
+ var planIDsOnDatabase = [String]() // メンバ変数で定義しています
200
+
201
+
202
+
203
+ // ---------- ↓実際の処理 ----------
204
+
205
+
206
+
207
+ var everyone = ["sample01", "sample02", "sample03"]
208
+
209
+ print("everyoneの要素数: (everyone.count)") // 3
210
+
211
+
212
+
213
+ var count = 0
214
+
215
+ var checkCount = 0
216
+
217
+
218
+
219
+ while count < everyone.count {
220
+
221
+
222
+
223
+ if count == checkCount {
224
+
135
225
  checkCount += 1
136
226
 
137
- // 時間遅れに揺らぎ(0.5秒から1.0秒の間)を与える
138
-
139
- let delay = Double.random(in: 0.5...1.0)
227
+ planIDsOnDatabase.removeAll()
140
-
141
- dispatchQueue.asyncAfter(deadline: .now() + delay) {
228
+
142
-
229
+
230
+
143
- print("countB: (countB)")
231
+ print("count: (count)")
232
+
144
-
233
+ fetchPlanIDs(accountID: everyone[count], completion: {
234
+
235
+ // データベースの予定ID取得後に新たなIDを追加
236
+
237
+ self.planIDsOnDatabase.append(planID)
238
+
239
+
240
+
241
+ // 次の処理(データベースに保存)
242
+
243
+ self.addPlanIDToDatabase(accountID: everyone[count], newPlanID: planID, completion: {
244
+
245
+ // データベースに予定ID保存後、次の人へ
246
+
145
- countB += 1
247
+ count += 1
146
-
248
+
147
- }
249
+ })
250
+
251
+ })
148
252
 
149
253
  }
150
254
 
@@ -152,110 +256,6 @@
152
256
 
153
257
  ```
154
258
 
155
-
156
-
157
- 以下がプリントされます。
158
-
159
- ```
160
-
161
- countB: 0
162
-
163
- countB: 1
164
-
165
- countB: 2
166
-
167
- countB: 3
168
-
169
- ```
170
-
171
-
172
-
173
- このように、条件が無視されて処理が続くのはどのようなときなのか、
174
-
175
- その対処法などありましたら教えていただきたく思います。
176
-
177
-
178
-
179
-
180
-
181
- ### 具体的なこと
182
-
183
-
184
-
185
- 質問内容は上記で以上なのですが、念のため実際に使っている部分も掲載します。
186
-
187
- (ややこしいので読み飛ばしていただいても大丈夫だと思います)
188
-
189
-
190
-
191
- データベースにIDを保存する処理([前回の質問](https://teratail.com/questions/297117))を、
192
-
193
- 1人目、1人目が終わったら2人目……と順番にやりたかったので、以下のように書いています。
194
-
195
-
196
-
197
- ```Swift
198
-
199
- var planIDsOnDatabase = [String]() // メンバ変数で定義しています
200
-
201
-
202
-
203
- // ---------- ↓実際の処理 ----------
204
-
205
-
206
-
207
- var everyone = ["sample01", "sample02", "sample03"]
208
-
209
- print("everyoneの要素数: (everyone.count)") // 3
210
-
211
-
212
-
213
- var count = 0
214
-
215
- var checkCount = 0
216
-
217
-
218
-
219
- while count < everyone.count {
220
-
221
-
222
-
223
- if count == checkCount {
224
-
225
- checkCount += 1
226
-
227
- planIDsOnDatabase.removeAll()
228
-
229
-
230
-
231
- print("count: (count)")
232
-
233
- fetchPlanIDs(accountID: everyone[count], completion: {
234
-
235
- // データベースの予定ID取得後に新たなIDを追加
236
-
237
- self.planIDsOnDatabase.append(planID)
238
-
239
-
240
-
241
- // 次の処理(データベースに保存)
242
-
243
- self.addPlanIDToDatabase(accountID: everyone[count], newPlanID: planID, completion: {
244
-
245
- // データベースに予定ID保存後、次の人へ
246
-
247
- count += 1
248
-
249
- })
250
-
251
- })
252
-
253
- }
254
-
255
- }
256
-
257
- ```
258
-
259
259
  条件式```while count < everyone.count```から、0〜2までの3回実行させたいのですが、意図せず4回目が実行されてしまいエラーになります。
260
260
 
261
261