質問編集履歴

5

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

2020/05/07 07:56

投稿

nyansuke373
nyansuke373

スコア7

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

4

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

2020/05/07 07:56

投稿

nyansuke373
nyansuke373

スコア7

title CHANGED
File without changes
body CHANGED
@@ -8,7 +8,7 @@
8
8
  UITextField型のresultTextViewをString型に直せば良いのでしょうか?
9
9
  そうであれば直しかたを教えていただきたいです。
10
10
 
11
- ①ResultViewController 呼び出し
11
+ ①ResultViewController 結果の表示
12
12
  ```Swift
13
13
  import UIKit
14
14
 
@@ -62,4 +62,38 @@
62
62
  のようにResultViewControllerを呼び出しています。
63
63
  ※もし、呼び出す場所がAlamofireのクロージャー内がまずいのであれば、どのように修正するのが良いでしょうか?
64
64
 
65
+ ③ViewController
66
+ ```
67
+ import UIKit
68
+
69
+ class ViewController: UIViewController,UITextFieldDelegate {
70
+
71
+ @IBOutlet weak var inputTextView: UITextField!
72
+ @IBOutlet weak var outputTextView: UITextField!
73
+ // APIRequestの初期化
65
- ③ストーリーボードへの接続は正しい接続となっております。
74
+ var apiRequest = APIRequest()
75
+
76
+ override func viewDidLoad() {
77
+ super.viewDidLoad()
78
+
79
+ inputTextView.delegate = self
80
+ initInputText()
81
+ }
82
+
83
+ private func initInputText() {
84
+ inputTextView.text = ""
85
+ }
86
+
87
+ @IBAction func convertButton(_ sender: UIButton) {
88
+ //キーボードを閉じる
89
+ view.endEditing(true)
90
+
91
+ //ここでHttpRequestを呼んでいます
92
+ apiRequest.HttpRequest(sentence: inputTextView.text!)
93
+
94
+ }
95
+ }
96
+
97
+ ```
98
+ ViewController(入力後HttpRequestを呼んでいます)→HttpRequest(API取得)→ResultViewController(結果表示)をしたいです。
99
+ ![ViewController](c170f803f85dc80a7e04fda01eb872bb.png)

3

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

2020/05/07 03:32

投稿

nyansuke373
nyansuke373

スコア7

title CHANGED
File without changes
body CHANGED
@@ -30,10 +30,17 @@
30
30
 
31
31
  ②呼び出し元 APIを叩いて得られたデータをJSON解析を行い帰ってきたデータを使っています。
32
32
  ```
33
+ import Alamofire
34
+ import SwiftyJSON
35
+
36
+ // ViewControllerの初期化
37
+ var VC = ViewController()
38
+ var ResultVC = ResultViewController()
39
+
33
40
  public class APIRequest {
34
41
 
35
42
  func HttpRequest(sentence: String) {
36
-
43
+
37
44
  Alamofire.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseJSON { response in
38
45
  switch response.result {
39
46
  // 処理成功時
@@ -49,9 +56,7 @@
49
56
  case .failure(let error):
50
57
  }
51
58
  }
52
- }
59
+ }
53
-
54
-
55
60
  }
56
61
  ```
57
62
  のようにResultViewControllerを呼び出しています。

2

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

2020/05/06 23:59

投稿

nyansuke373
nyansuke373

スコア7

title CHANGED
File without changes
body CHANGED
@@ -8,17 +8,33 @@
8
8
  UITextField型のresultTextViewをString型に直せば良いのでしょうか?
9
9
  そうであれば直しかたを教えていただきたいです。
10
10
 
11
+ ①ResultViewController 呼び出し先
11
12
  ```Swift
12
- @IBOutlet weak var resultTextView: UITextField!
13
+ import UIKit
13
14
 
15
+ class ResultViewController: UIViewController, UITextFieldDelegate {
16
+
17
+ @IBOutlet weak var resultTextView: UITextField!
18
+
19
+ override func viewDidLoad() {
20
+ super.viewDidLoad()
21
+ resultTextView.delegate = self
22
+ }
23
+
14
- func showResult(resultString: String) {
24
+ func showResult(resultString: String) {
15
- resultTextView?.text = resultString
25
+ resultTextView?.text = resultString  //  ← ここに渡ってくる値です
26
+ print(resultString)
27
+ }
16
28
  }
17
29
  ```
18
30
 
19
- 呼び出し元 APIを叩いて得られたデータをJSON解析を行い帰ってきたデータを使っています。
31
+ 呼び出し元 APIを叩いて得られたデータをJSON解析を行い帰ってきたデータを使っています。
20
32
  ```
33
+ public class APIRequest {
34
+
35
+ func HttpRequest(sentence: String) {
36
+
21
- Alamofire.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseJSON { response in
37
+ Alamofire.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseJSON { response in
22
38
  switch response.result {
23
39
  // 処理成功時
24
40
  case .success:
@@ -26,8 +42,19 @@
26
42
  //SwiftyJSONを使用してJSON解析
27
43
  let json:JSON = JSON(response.data as Any)
28
44
  var resultString = json["converted"].string
29
- ResultVC.showResult(resultString: resultString!)
45
+ ResultVC.showResult(resultString: resultString!) 
46
+                    //↑ここから呼び出す
30
47
  }
48
+ // 処理失敗時
49
+ case .failure(let error):
50
+ }
51
+ }
52
+ }
53
+
54
+
55
+ }
31
56
  ```
32
57
  のようにResultViewControllerを呼び出しています。
58
+ ※もし、呼び出す場所がAlamofireのクロージャー内がまずいのであれば、どのように修正するのが良いでしょうか?
59
+
33
- ストーリーボードへの接続は正しい接続となっております。
60
+ ストーリーボードへの接続は正しい接続となっております。

1

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

2020/05/06 23:54

投稿

nyansuke373
nyansuke373

スコア7

title CHANGED
File without changes
body CHANGED
@@ -14,4 +14,20 @@
14
14
  func showResult(resultString: String) {
15
15
  resultTextView?.text = resultString
16
16
  }
17
- ```
17
+ ```
18
+
19
+ ①呼び出し元 APIを叩いて得られたデータをJSON解析を行い帰ってきたデータを使っています。
20
+ ```
21
+ Alamofire.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseJSON { response in
22
+ switch response.result {
23
+ // 処理成功時
24
+ case .success:
25
+ if let result = response.result.value as? [String: Any] {
26
+ //SwiftyJSONを使用してJSON解析
27
+ let json:JSON = JSON(response.data as Any)
28
+ var resultString = json["converted"].string
29
+ ResultVC.showResult(resultString: resultString!)
30
+ }
31
+ ```
32
+ のようにResultViewControllerを呼び出しています。
33
+ ②ストーリーボードへの接続は正しい接続となっております。