回答編集履歴

1

add using reflect

2020/07/10 02:07

投稿

YufanLou
YufanLou

スコア464

test CHANGED
@@ -265,3 +265,51 @@
265
265
  self.CHANGEOFWAIT = values[66]
266
266
 
267
267
  ```
268
+
269
+
270
+
271
+ ---
272
+
273
+
274
+
275
+ 追記:fuzzballさんがリフレクションの使い方を教えてくれました!ありがとうございます!
276
+
277
+
278
+
279
+ ```swift
280
+
281
+ struct Food { var Group, FoodNumber, (中略) : String? } //一時的にオプショナル型にする
282
+
283
+
284
+
285
+ Mirror(reflecting: Food()).children.compactMap { $0.label }.enumerated().forEach {
286
+
287
+ print("self.($0.element) = values[($0.offset)]")
288
+
289
+ }
290
+
291
+ ```
292
+
293
+
294
+
295
+ `struct Food`の中の`var`の型が元は`String`ですが、`Food()`を使えるようになるため、`String?`みたいに`?`で後飾ってオプショナル型にします。
296
+
297
+
298
+
299
+ `compactMap`と`forEach`が実にいいことで覚えるのをおすすめですが、for loopで書いたらこうなります:
300
+
301
+
302
+
303
+ ```swift
304
+
305
+ for (offset, (label, _)) Mirror(reflecting: Food()).children.enumerated() {
306
+
307
+ print("self.(label) = values[(offset)]")
308
+
309
+ }
310
+
311
+ ```
312
+
313
+
314
+
315
+ 出力は上記と同じになります。