質問編集履歴

5

修正後、新たな問題nilの発生

2020/05/07 07:56

投稿

nyansuke373
nyansuke373

スコア7

test CHANGED
File without changes
test CHANGED
@@ -195,3 +195,7 @@
195
195
  ViewController(入力後HttpRequestを呼んでいます)→HttpRequest(API取得)→ResultViewController(結果表示)をしたいです。
196
196
 
197
197
  ![ViewController](c170f803f85dc80a7e04fda01eb872bb.png)
198
+
199
+ 回答ありがとうございます。修正後、(HttpRequestを呼ぶより先にsegueで遷移してしまっているため?)nilでResultViewControllerに渡ってきてしまっている問題が発生しております。
200
+
201
+ ![イメージ説明](4ea621b472b01dd2bc6dfab7de9991c8.png)

4

ViewControllerについての記述とストーリーボードの画像を添付しました。

2020/05/07 07:56

投稿

nyansuke373
nyansuke373

スコア7

test CHANGED
File without changes
test CHANGED
@@ -18,7 +18,7 @@
18
18
 
19
19
 
20
20
 
21
- ①ResultViewController 呼び出し
21
+ ①ResultViewController 結果の表示
22
22
 
23
23
  ```Swift
24
24
 
@@ -126,4 +126,72 @@
126
126
 
127
127
 
128
128
 
129
+ ③ViewController
130
+
131
+ ```
132
+
133
+ import UIKit
134
+
135
+
136
+
137
+ class ViewController: UIViewController,UITextFieldDelegate {
138
+
139
+
140
+
141
+ @IBOutlet weak var inputTextView: UITextField!
142
+
143
+ @IBOutlet weak var outputTextView: UITextField!
144
+
145
+ // APIRequestの初期化
146
+
129
- ③ストーリーボードへの接続は正しい接続となっております。
147
+ var apiRequest = APIRequest()
148
+
149
+
150
+
151
+ override func viewDidLoad() {
152
+
153
+ super.viewDidLoad()
154
+
155
+
156
+
157
+ inputTextView.delegate = self
158
+
159
+ initInputText()
160
+
161
+ }
162
+
163
+
164
+
165
+ private func initInputText() {
166
+
167
+ inputTextView.text = ""
168
+
169
+ }
170
+
171
+
172
+
173
+ @IBAction func convertButton(_ sender: UIButton) {
174
+
175
+ //キーボードを閉じる
176
+
177
+ view.endEditing(true)
178
+
179
+
180
+
181
+ //ここでHttpRequestを呼んでいます
182
+
183
+ apiRequest.HttpRequest(sentence: inputTextView.text!)
184
+
185
+
186
+
187
+ }
188
+
189
+ }
190
+
191
+
192
+
193
+ ```
194
+
195
+ ViewController(入力後HttpRequestを呼んでいます)→HttpRequest(API取得)→ResultViewController(結果表示)をしたいです。
196
+
197
+ ![ViewController](c170f803f85dc80a7e04fda01eb872bb.png)

3

ViewControllerの初期化について記述しました

2020/05/07 03:32

投稿

nyansuke373
nyansuke373

スコア7

test CHANGED
File without changes
test CHANGED
@@ -62,13 +62,27 @@
62
62
 
63
63
  ```
64
64
 
65
+ import Alamofire
66
+
67
+ import SwiftyJSON
68
+
69
+
70
+
71
+ // ViewControllerの初期化
72
+
73
+ var VC = ViewController()
74
+
75
+ var ResultVC = ResultViewController()
76
+
77
+
78
+
65
79
  public class APIRequest {
66
80
 
67
81
 
68
82
 
69
83
  func HttpRequest(sentence: String) {
70
84
 
71
-
85
+
72
86
 
73
87
  Alamofire.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseJSON { response in
74
88
 
@@ -100,11 +114,7 @@
100
114
 
101
115
  }
102
116
 
103
- }
117
+ }
104
-
105
-
106
-
107
-
108
118
 
109
119
  }
110
120
 

2

呼び出し元で、showResultメソッドを実行している部分を追記しました。

2020/05/06 23:59

投稿

nyansuke373
nyansuke373

スコア7

test CHANGED
File without changes
test CHANGED
@@ -18,15 +18,39 @@
18
18
 
19
19
 
20
20
 
21
+ ①ResultViewController 呼び出し先
22
+
21
23
  ```Swift
22
24
 
23
- @IBOutlet weak var resultTextView: UITextField!
25
+ import UIKit
24
26
 
25
27
 
26
28
 
27
- func showResult(resultString: String) {
29
+ class ResultViewController: UIViewController, UITextFieldDelegate {
28
30
 
31
+
32
+
33
+ @IBOutlet weak var resultTextView: UITextField!
34
+
35
+
36
+
37
+ override func viewDidLoad() {
38
+
39
+ super.viewDidLoad()
40
+
29
- resultTextView?.text = resultString
41
+ resultTextView.delegate = self
42
+
43
+ }
44
+
45
+
46
+
47
+ func showResult(resultString: String) {
48
+
49
+ resultTextView?.text = resultString  //  ← ここに渡ってくる値です
50
+
51
+ print(resultString)
52
+
53
+ }
30
54
 
31
55
  }
32
56
 
@@ -34,11 +58,19 @@
34
58
 
35
59
 
36
60
 
37
- 呼び出し元 APIを叩いて得られたデータをJSON解析を行い帰ってきたデータを使っています。
61
+ 呼び出し元 APIを叩いて得られたデータをJSON解析を行い帰ってきたデータを使っています。
38
62
 
39
63
  ```
40
64
 
65
+ public class APIRequest {
66
+
67
+
68
+
69
+ func HttpRequest(sentence: String) {
70
+
71
+
72
+
41
- Alamofire.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseJSON { response in
73
+ Alamofire.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseJSON { response in
42
74
 
43
75
  switch response.result {
44
76
 
@@ -54,12 +86,34 @@
54
86
 
55
87
  var resultString = json["converted"].string
56
88
 
57
- ResultVC.showResult(resultString: resultString!)
89
+ ResultVC.showResult(resultString: resultString!) 
90
+
91
+                    //↑ここから呼び出す
58
92
 
59
93
  }
94
+
95
+ // 処理失敗時
96
+
97
+ case .failure(let error):
98
+
99
+ }
100
+
101
+ }
102
+
103
+ }
104
+
105
+
106
+
107
+
108
+
109
+ }
60
110
 
61
111
  ```
62
112
 
63
113
  のようにResultViewControllerを呼び出しています。
64
114
 
115
+ ※もし、呼び出す場所がAlamofireのクロージャー内がまずいのであれば、どのように修正するのが良いでしょうか?
116
+
117
+
118
+
65
- ストーリーボードへの接続は正しい接続となっております。
119
+ ストーリーボードへの接続は正しい接続となっております。

1

呼び出し元で、showResultメソッドを実行している部分を追記しました。

2020/05/06 23:54

投稿

nyansuke373
nyansuke373

スコア7

test CHANGED
File without changes
test CHANGED
@@ -31,3 +31,35 @@
31
31
  }
32
32
 
33
33
  ```
34
+
35
+
36
+
37
+ ①呼び出し元 APIを叩いて得られたデータをJSON解析を行い帰ってきたデータを使っています。
38
+
39
+ ```
40
+
41
+ Alamofire.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseJSON { response in
42
+
43
+ switch response.result {
44
+
45
+ // 処理成功時
46
+
47
+ case .success:
48
+
49
+ if let result = response.result.value as? [String: Any] {
50
+
51
+ //SwiftyJSONを使用してJSON解析
52
+
53
+ let json:JSON = JSON(response.data as Any)
54
+
55
+ var resultString = json["converted"].string
56
+
57
+ ResultVC.showResult(resultString: resultString!)
58
+
59
+ }
60
+
61
+ ```
62
+
63
+ のようにResultViewControllerを呼び出しています。
64
+
65
+ ②ストーリーボードへの接続は正しい接続となっております。