回答編集履歴
2
余計な文で意味が不明瞭になるところを削除
answer
CHANGED
@@ -87,7 +87,6 @@
|
|
87
87
|
NSSearchPathDomainMask > UserDomainMaskのツリー構造になっています。
|
88
88
|
|
89
89
|
Swift3でよりよくリファクタリングしようとしたときにこのツリー構造は壊したくないです。
|
90
|
-
(でもバラバラに定義すると壊れる)
|
91
90
|
|
92
91
|
そしてどのように変更されたのかを見ると
|
93
92
|
|
1
OptionSetの使い方追記
answer
CHANGED
@@ -100,4 +100,31 @@
|
|
100
100
|
ここで質問の答えをしたいと思います。
|
101
101
|
「extensionでプロパティを増やしたいならなぜわざわざ構造体を定義したのか?コンピュートプロパティなど他のやり方があるのになぜ?」という質問には
|
102
102
|
「昔からSearchPathDomainMask > UserDomainMaskのツリー構造でObjcもSwift2も定義されていたので、バラバラに定義するのは不合理。Swift3でSearchPathDomainMaskがFileManagerの配下になり、FileManager > SearchPathDomainMask > UserDomainMaskというツリー構造になった。わざわざ構造体を定義した理由はFileManagerというファイルを扱うものの下にSearchPathDomainMaskを定義することで、構造を明確化し可読性を上げるため」
|
103
|
-
とお答えします。
|
103
|
+
とお答えします。
|
104
|
+
|
105
|
+
#追記 OptionSetの使い方
|
106
|
+
公式サイトにoptionsetの使い方が書かれていました。
|
107
|
+
[https://developer.apple.com/reference/swift/optionset](https://developer.apple.com/reference/swift/optionset)
|
108
|
+
|
109
|
+
ECサイトなどで購入者の商品配送方法をオプションセットで表す例です。
|
110
|
+
|
111
|
+
```swift
|
112
|
+
struct ShippingOptions: OptionSet {
|
113
|
+
let rawValue: Int
|
114
|
+
|
115
|
+
static let nextDay = ShippingOptions(rawValue: 1 << 0)//次の日
|
116
|
+
static let secondDay = ShippingOptions(rawValue: 1 << 1)//二日後
|
117
|
+
static let priority = ShippingOptions(rawValue: 1 << 2)//優先的に
|
118
|
+
static let standard = ShippingOptions(rawValue: 1 << 3)//標準
|
119
|
+
|
120
|
+
static let express: ShippingOptions = [.nextDay, .secondDay]//特急オプション
|
121
|
+
static let all: ShippingOptions = [.express, .priority, .standard]//全部入り
|
122
|
+
}
|
123
|
+
```
|
124
|
+
nextDayなどオプションをstaticで保持して、型ShippingOptionsになっているところ、SearchPathDomainMaskと同じですね。プロパティが自身の型になっているところが。staticで型プロパティにしているからできるんだと思います。
|
125
|
+
OptionSetはこんなふうに使うんですね。
|
126
|
+
私も勉強になりました。
|
127
|
+
|
128
|
+
参考にしてください!
|
129
|
+
|
130
|
+
|