回答編集履歴

2

追記

2017/11/18 10:57

投稿

xAxis
xAxis

スコア1349

test CHANGED
@@ -38,7 +38,7 @@
38
38
 
39
39
 
40
40
 
41
- 誰か何か回答してくれるんじゃないかと期待しながらちょくちょく見てたのですがあまり反応がないのでこっそり投稿です。とは言ってもmacOSは上記の通り門外漢ですのでiOSで同じような構成をとってます。またよく分からなかったものに関しては置き換え等々しています(senderの型のAnyとか)。なお命名に関してはかなりザル管理です。ここもっと良く出来るんじゃね?みたいな部分がありましたらご教授いただけましたら嬉しいです(とっても)。
41
+ 誰か何か回答してくれるんじゃないかと期待しながらちょくちょく見てたのですがあまり反応がないのでこっそり投稿です。とは言ってもmacOSは上記の通り門外漢ですのでiOSで同じような構成をとってます。またよく分からなかったものに関しては置き換え等々しています(senderの型のAnyとか)。なお命名に関してはかなりザル管理です。ここもっと良く出来るんじゃね?みたいな部分がありましたらご教授いただけましたら嬉しいです(とっても)。もし参考になれば幸いです。
42
42
 
43
43
 
44
44
 

1

追記

2017/11/18 10:57

投稿

xAxis
xAxis

スコア1349

test CHANGED
@@ -31,3 +31,365 @@
31
31
 
32
32
 
33
33
  googleで「文化を調和させる swift」で調べるとこの記事を実践された方のコードがgithubにも上がってます。そちらも合わせて読むと分かりやすいですよ。
34
+
35
+
36
+
37
+ ###追記
38
+
39
+
40
+
41
+ 誰か何か回答してくれるんじゃないかと期待しながらちょくちょく見てたのですがあまり反応がないのでこっそり投稿です。とは言ってもmacOSは上記の通り門外漢ですのでiOSで同じような構成をとってます。またよく分からなかったものに関しては置き換え等々しています(senderの型のAnyとか)。なお命名に関してはかなりザル管理です。ここもっと良く出来るんじゃね?みたいな部分がありましたらご教授いただけましたら嬉しいです(とっても)。
42
+
43
+
44
+
45
+ ![Storyboard](ba8614a99031710ba3d391236f313ecc.png)
46
+
47
+ ![ParameterView.xib](ed5c600d7f8600e4f4ec4133e5388512.png)
48
+
49
+
50
+
51
+
52
+
53
+ ```swift
54
+
55
+
56
+
57
+ //(6)
58
+
59
+ enum containerType: Int {
60
+
61
+ case top = 0
62
+
63
+ case middle = 1
64
+
65
+ case bottom = 2
66
+
67
+ }
68
+
69
+
70
+
71
+ enum propertyType {
72
+
73
+ case typeA
74
+
75
+ case typeB
76
+
77
+ case typeC
78
+
79
+ }
80
+
81
+
82
+
83
+ enum properties {
84
+
85
+
86
+
87
+ static let defaultA: [String] = ["38000", "300", "0.5"]
88
+
89
+ static let defaultB: [String] = ["40000", "200", "0.6"]
90
+
91
+ static let defaultC: [String] = ["48000", "240", "0.55"]
92
+
93
+
94
+
95
+ static func pickupPropertiesSet(_ property: propertyType) -> (containerType) -> String {
96
+
97
+ switch property {
98
+
99
+ case .typeA:
100
+
101
+ return { (controller: containerType) -> String in
102
+
103
+ return defaultA[controller.rawValue]
104
+
105
+ }
106
+
107
+ case .typeB:
108
+
109
+ return { (controller: containerType) -> String in
110
+
111
+ return defaultB[controller.rawValue]
112
+
113
+ }
114
+
115
+ case .typeC:
116
+
117
+ return { (controller: containerType) -> String in
118
+
119
+ return defaultC[controller.rawValue]
120
+
121
+ }
122
+
123
+ }
124
+
125
+ }
126
+
127
+ }
128
+
129
+
130
+
131
+ ```
132
+
133
+
134
+
135
+ ```swift
136
+
137
+ class ViewController: UIViewController {
138
+
139
+
140
+
141
+ var myFunctions = Functions()
142
+
143
+
144
+
145
+ //IBOutletCollection 三つ程度なら普段ならまとめたりしないです。
146
+
147
+ @IBOutlet var containers: [ParameterContainerView]!
148
+
149
+
150
+
151
+ //(5)
152
+
153
+ @IBAction func tapDefaultA(_ sender: UIButton) {
154
+
155
+ myFunctions.defaultProperties(typeOf: .typeA, containers: containers)
156
+
157
+ }
158
+
159
+ @IBAction func tapDefaultB(_ sender: UIButton) {
160
+
161
+ myFunctions.defaultProperties(typeOf: .typeB, containers: containers)
162
+
163
+ }
164
+
165
+ @IBAction func tapDefaultC(_ sender: UIButton) {
166
+
167
+ myFunctions.defaultProperties(typeOf: .typeC, containers: containers)
168
+
169
+ }
170
+
171
+
172
+
173
+ override func viewDidLoad() {
174
+
175
+ super.viewDidLoad()
176
+
177
+ }
178
+
179
+
180
+
181
+ override func didReceiveMemoryWarning() {
182
+
183
+ super.didReceiveMemoryWarning()
184
+
185
+ }
186
+
187
+
188
+
189
+ }
190
+
191
+ ```
192
+
193
+
194
+
195
+ ```swift
196
+
197
+ //(3)
198
+
199
+ class ParameterView: UIView {
200
+
201
+
202
+
203
+ @IBOutlet weak var firstTextField: UITextField!
204
+
205
+ @IBAction func actionFirstTextField(_ sender: UISlider) {
206
+
207
+ firstTextField.text = String(sender.value)
208
+
209
+ }
210
+
211
+
212
+
213
+ @IBOutlet weak var secondTextField: UITextField!
214
+
215
+ @IBAction func actionSecondTextField(_ sender: UISlider) {
216
+
217
+ secondTextField.text = String(sender.value)
218
+
219
+ }
220
+
221
+
222
+
223
+ func fill(with text: String) {
224
+
225
+ firstTextField.text = text
226
+
227
+ secondTextField.text = text
228
+
229
+ }
230
+
231
+
232
+
233
+ }
234
+
235
+ ```
236
+
237
+
238
+
239
+ ```swift
240
+
241
+ //(3)
242
+
243
+ class ParameterContainerView: UIView {
244
+
245
+
246
+
247
+ override init(frame: CGRect) {
248
+
249
+ super.init(frame: frame)
250
+
251
+ load()
252
+
253
+
254
+
255
+ }
256
+
257
+
258
+
259
+ required init?(coder aDecoder: NSCoder) {
260
+
261
+ super.init(coder: aDecoder)
262
+
263
+ load()
264
+
265
+ }
266
+
267
+
268
+
269
+ func load() {
270
+
271
+ if self.subviews.isEmpty {
272
+
273
+ let testView = ParameterView.instantiate()
274
+
275
+ testView.frame = self.bounds
276
+
277
+ self.addSubview(testView)
278
+
279
+ }
280
+
281
+ }
282
+
283
+
284
+
285
+ open func accessParameterView() -> ParameterView {
286
+
287
+ guard let view = self.subviews.first as? ParameterView else {
288
+
289
+ fatalError()
290
+
291
+ }
292
+
293
+ return view
294
+
295
+ }
296
+
297
+
298
+
299
+ func fill(with text: String) {
300
+
301
+ let parameterView = accessParameterView()
302
+
303
+ parameterView.fill(with: text)
304
+
305
+ }
306
+
307
+
308
+
309
+ }
310
+
311
+ ```
312
+
313
+
314
+
315
+ ```swift
316
+
317
+
318
+
319
+ extension NSObject {
320
+
321
+ class var className: String {
322
+
323
+ return String(describing: self)
324
+
325
+ }
326
+
327
+
328
+
329
+ var className: String {
330
+
331
+ return type(of: self).className
332
+
333
+ }
334
+
335
+ }
336
+
337
+
338
+
339
+ protocol NibInstantiatable {}
340
+
341
+ extension UIView: NibInstantiatable {}
342
+
343
+
344
+
345
+ extension NibInstantiatable where Self: UIView {
346
+
347
+ static func instantiate(withOwner ownerOrNil: Any? = nil) -> Self {
348
+
349
+ let nib = UINib(nibName: self.className, bundle: nil)
350
+
351
+ return nib.instantiate(withOwner: ownerOrNil, options: nil)[0] as! Self
352
+
353
+ }
354
+
355
+ }
356
+
357
+
358
+
359
+ ```
360
+
361
+
362
+
363
+ ```swift
364
+
365
+ class Functions {
366
+
367
+
368
+
369
+ private func callDefaultProperty(_ propertyType: propertyType) -> ((containerType) -> String) {
370
+
371
+ return properties.pickupPropertiesSet(propertyType)
372
+
373
+ }
374
+
375
+ //(4)
376
+
377
+ func defaultProperties(typeOf type: propertyType, containers: [ParameterContainerView]) {
378
+
379
+ containers.enumerated().forEach { (index, container) in
380
+
381
+ let text = callDefaultProperty(type)(containerType(rawValue: index)!)
382
+
383
+ container.fill(with: text)
384
+
385
+ }
386
+
387
+ }
388
+
389
+
390
+
391
+
392
+
393
+ }
394
+
395
+ ```