回答編集履歴

2

余計な文で意味が不明瞭になるところを削除

2017/01/14 06:45

投稿

SatoTakeshiX
SatoTakeshiX

スコア113

test CHANGED
@@ -176,8 +176,6 @@
176
176
 
177
177
  Swift3でよりよくリファクタリングしようとしたときにこのツリー構造は壊したくないです。
178
178
 
179
- (でもバラバラに定義すると壊れる)
180
-
181
179
 
182
180
 
183
181
  そしてどのように変更されたのかを見ると

1

OptionSetの使い方追記

2017/01/14 06:45

投稿

SatoTakeshiX
SatoTakeshiX

スコア113

test CHANGED
@@ -203,3 +203,59 @@
203
203
  「昔からSearchPathDomainMask > UserDomainMaskのツリー構造でObjcもSwift2も定義されていたので、バラバラに定義するのは不合理。Swift3でSearchPathDomainMaskがFileManagerの配下になり、FileManager > SearchPathDomainMask > UserDomainMaskというツリー構造になった。わざわざ構造体を定義した理由はFileManagerというファイルを扱うものの下にSearchPathDomainMaskを定義することで、構造を明確化し可読性を上げるため」
204
204
 
205
205
  とお答えします。
206
+
207
+
208
+
209
+ #追記 OptionSetの使い方
210
+
211
+ 公式サイトにoptionsetの使い方が書かれていました。
212
+
213
+ [https://developer.apple.com/reference/swift/optionset](https://developer.apple.com/reference/swift/optionset)
214
+
215
+
216
+
217
+ ECサイトなどで購入者の商品配送方法をオプションセットで表す例です。
218
+
219
+
220
+
221
+ ```swift
222
+
223
+ struct ShippingOptions: OptionSet {
224
+
225
+ let rawValue: Int
226
+
227
+
228
+
229
+ static let nextDay = ShippingOptions(rawValue: 1 << 0)//次の日
230
+
231
+ static let secondDay = ShippingOptions(rawValue: 1 << 1)//二日後
232
+
233
+ static let priority = ShippingOptions(rawValue: 1 << 2)//優先的に
234
+
235
+ static let standard = ShippingOptions(rawValue: 1 << 3)//標準
236
+
237
+
238
+
239
+ static let express: ShippingOptions = [.nextDay, .secondDay]//特急オプション
240
+
241
+ static let all: ShippingOptions = [.express, .priority, .standard]//全部入り
242
+
243
+ }
244
+
245
+ ```
246
+
247
+ nextDayなどオプションをstaticで保持して、型ShippingOptionsになっているところ、SearchPathDomainMaskと同じですね。プロパティが自身の型になっているところが。staticで型プロパティにしているからできるんだと思います。
248
+
249
+ OptionSetはこんなふうに使うんですね。
250
+
251
+ 私も勉強になりました。
252
+
253
+
254
+
255
+ 参考にしてください!
256
+
257
+
258
+
259
+
260
+
261
+