teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

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

2017/01/14 06:45

投稿

SatoTakeshiX
SatoTakeshiX

スコア113

answer CHANGED
@@ -87,7 +87,6 @@
87
87
  NSSearchPathDomainMask > UserDomainMaskのツリー構造になっています。
88
88
 
89
89
  Swift3でよりよくリファクタリングしようとしたときにこのツリー構造は壊したくないです。
90
- (でもバラバラに定義すると壊れる)
91
90
 
92
91
  そしてどのように変更されたのかを見ると
93
92
 

1

OptionSetの使い方追記

2017/01/14 06:45

投稿

SatoTakeshiX
SatoTakeshiX

スコア113

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
+