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

回答編集履歴

2

追記

2017/11/18 10:57

投稿

xAxis
xAxis

スコア1349

answer CHANGED
@@ -18,7 +18,7 @@
18
18
 
19
19
  ###追記
20
20
 
21
- 誰か何か回答してくれるんじゃないかと期待しながらちょくちょく見てたのですがあまり反応がないのでこっそり投稿です。とは言ってもmacOSは上記の通り門外漢ですのでiOSで同じような構成をとってます。またよく分からなかったものに関しては置き換え等々しています(senderの型のAnyとか)。なお命名に関してはかなりザル管理です。ここもっと良く出来るんじゃね?みたいな部分がありましたらご教授いただけましたら嬉しいです(とっても)。
21
+ 誰か何か回答してくれるんじゃないかと期待しながらちょくちょく見てたのですがあまり反応がないのでこっそり投稿です。とは言ってもmacOSは上記の通り門外漢ですのでiOSで同じような構成をとってます。またよく分からなかったものに関しては置き換え等々しています(senderの型のAnyとか)。なお命名に関してはかなりザル管理です。ここもっと良く出来るんじゃね?みたいな部分がありましたらご教授いただけましたら嬉しいです(とっても)。もし参考になれば幸いです。
22
22
 
23
23
  ![Storyboard](ba8614a99031710ba3d391236f313ecc.png)
24
24
  ![ParameterView.xib](ed5c600d7f8600e4f4ec4133e5388512.png)

1

追記

2017/11/18 10:57

投稿

xAxis
xAxis

スコア1349

answer CHANGED
@@ -14,4 +14,185 @@
14
14
 
15
15
  [https://academy.realm.io/jp/posts/tryswift-daniel-steinberg-blending-cultures/](https://academy.realm.io/jp/posts/tryswift-daniel-steinberg-blending-cultures/)
16
16
 
17
- googleで「文化を調和させる swift」で調べるとこの記事を実践された方のコードがgithubにも上がってます。そちらも合わせて読むと分かりやすいですよ。
17
+ googleで「文化を調和させる swift」で調べるとこの記事を実践された方のコードがgithubにも上がってます。そちらも合わせて読むと分かりやすいですよ。
18
+
19
+ ###追記
20
+
21
+ 誰か何か回答してくれるんじゃないかと期待しながらちょくちょく見てたのですがあまり反応がないのでこっそり投稿です。とは言ってもmacOSは上記の通り門外漢ですのでiOSで同じような構成をとってます。またよく分からなかったものに関しては置き換え等々しています(senderの型のAnyとか)。なお命名に関してはかなりザル管理です。ここもっと良く出来るんじゃね?みたいな部分がありましたらご教授いただけましたら嬉しいです(とっても)。
22
+
23
+ ![Storyboard](ba8614a99031710ba3d391236f313ecc.png)
24
+ ![ParameterView.xib](ed5c600d7f8600e4f4ec4133e5388512.png)
25
+
26
+
27
+ ```swift
28
+
29
+ //(6)
30
+ enum containerType: Int {
31
+ case top = 0
32
+ case middle = 1
33
+ case bottom = 2
34
+ }
35
+
36
+ enum propertyType {
37
+ case typeA
38
+ case typeB
39
+ case typeC
40
+ }
41
+
42
+ enum properties {
43
+
44
+ static let defaultA: [String] = ["38000", "300", "0.5"]
45
+ static let defaultB: [String] = ["40000", "200", "0.6"]
46
+ static let defaultC: [String] = ["48000", "240", "0.55"]
47
+
48
+ static func pickupPropertiesSet(_ property: propertyType) -> (containerType) -> String {
49
+ switch property {
50
+ case .typeA:
51
+ return { (controller: containerType) -> String in
52
+ return defaultA[controller.rawValue]
53
+ }
54
+ case .typeB:
55
+ return { (controller: containerType) -> String in
56
+ return defaultB[controller.rawValue]
57
+ }
58
+ case .typeC:
59
+ return { (controller: containerType) -> String in
60
+ return defaultC[controller.rawValue]
61
+ }
62
+ }
63
+ }
64
+ }
65
+
66
+ ```
67
+
68
+ ```swift
69
+ class ViewController: UIViewController {
70
+
71
+ var myFunctions = Functions()
72
+
73
+ //IBOutletCollection 三つ程度なら普段ならまとめたりしないです。
74
+ @IBOutlet var containers: [ParameterContainerView]!
75
+
76
+ //(5)
77
+ @IBAction func tapDefaultA(_ sender: UIButton) {
78
+ myFunctions.defaultProperties(typeOf: .typeA, containers: containers)
79
+ }
80
+ @IBAction func tapDefaultB(_ sender: UIButton) {
81
+ myFunctions.defaultProperties(typeOf: .typeB, containers: containers)
82
+ }
83
+ @IBAction func tapDefaultC(_ sender: UIButton) {
84
+ myFunctions.defaultProperties(typeOf: .typeC, containers: containers)
85
+ }
86
+
87
+ override func viewDidLoad() {
88
+ super.viewDidLoad()
89
+ }
90
+
91
+ override func didReceiveMemoryWarning() {
92
+ super.didReceiveMemoryWarning()
93
+ }
94
+
95
+ }
96
+ ```
97
+
98
+ ```swift
99
+ //(3)
100
+ class ParameterView: UIView {
101
+
102
+ @IBOutlet weak var firstTextField: UITextField!
103
+ @IBAction func actionFirstTextField(_ sender: UISlider) {
104
+ firstTextField.text = String(sender.value)
105
+ }
106
+
107
+ @IBOutlet weak var secondTextField: UITextField!
108
+ @IBAction func actionSecondTextField(_ sender: UISlider) {
109
+ secondTextField.text = String(sender.value)
110
+ }
111
+
112
+ func fill(with text: String) {
113
+ firstTextField.text = text
114
+ secondTextField.text = text
115
+ }
116
+
117
+ }
118
+ ```
119
+
120
+ ```swift
121
+ //(3)
122
+ class ParameterContainerView: UIView {
123
+
124
+ override init(frame: CGRect) {
125
+ super.init(frame: frame)
126
+ load()
127
+
128
+ }
129
+
130
+ required init?(coder aDecoder: NSCoder) {
131
+ super.init(coder: aDecoder)
132
+ load()
133
+ }
134
+
135
+ func load() {
136
+ if self.subviews.isEmpty {
137
+ let testView = ParameterView.instantiate()
138
+ testView.frame = self.bounds
139
+ self.addSubview(testView)
140
+ }
141
+ }
142
+
143
+ open func accessParameterView() -> ParameterView {
144
+ guard let view = self.subviews.first as? ParameterView else {
145
+ fatalError()
146
+ }
147
+ return view
148
+ }
149
+
150
+ func fill(with text: String) {
151
+ let parameterView = accessParameterView()
152
+ parameterView.fill(with: text)
153
+ }
154
+
155
+ }
156
+ ```
157
+
158
+ ```swift
159
+
160
+ extension NSObject {
161
+ class var className: String {
162
+ return String(describing: self)
163
+ }
164
+
165
+ var className: String {
166
+ return type(of: self).className
167
+ }
168
+ }
169
+
170
+ protocol NibInstantiatable {}
171
+ extension UIView: NibInstantiatable {}
172
+
173
+ extension NibInstantiatable where Self: UIView {
174
+ static func instantiate(withOwner ownerOrNil: Any? = nil) -> Self {
175
+ let nib = UINib(nibName: self.className, bundle: nil)
176
+ return nib.instantiate(withOwner: ownerOrNil, options: nil)[0] as! Self
177
+ }
178
+ }
179
+
180
+ ```
181
+
182
+ ```swift
183
+ class Functions {
184
+
185
+ private func callDefaultProperty(_ propertyType: propertyType) -> ((containerType) -> String) {
186
+ return properties.pickupPropertiesSet(propertyType)
187
+ }
188
+ //(4)
189
+ func defaultProperties(typeOf type: propertyType, containers: [ParameterContainerView]) {
190
+ containers.enumerated().forEach { (index, container) in
191
+ let text = callDefaultProperty(type)(containerType(rawValue: index)!)
192
+ container.fill(with: text)
193
+ }
194
+ }
195
+
196
+
197
+ }
198
+ ```