回答編集履歴
2
余計な文で意味が不明瞭になるところを削除
test
CHANGED
@@ -176,8 +176,6 @@
|
|
176
176
|
|
177
177
|
Swift3でよりよくリファクタリングしようとしたときにこのツリー構造は壊したくないです。
|
178
178
|
|
179
|
-
(でもバラバラに定義すると壊れる)
|
180
|
-
|
181
179
|
|
182
180
|
|
183
181
|
そしてどのように変更されたのかを見ると
|
1
OptionSetの使い方追記
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
|
+
|