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

質問編集履歴

1

詳細な質問文にしました

2019/10/17 15:04

投稿

syoco0330
syoco0330

スコア30

title CHANGED
@@ -1,1 +1,1 @@
1
- SwiftでTextField文字が表示されません
1
+ Swift】APIデータ変換した値をラベルに表示したい
body CHANGED
@@ -1,31 +1,100 @@
1
- resultの値をTextFieldに表示させたいのですが、シミュレータで確認すると空の状態となってしまいます。
2
- Labelでも試したのですresult の値が表示されせん
1
+ APIを使ってひらなに変換するアプリを作成してい
2
+ textFieldに入力した漢字が、hiraganaConvertButtonを押すことでひらがなに変換された値がtestLabelに表示されるようにしたいのですが、表示されません。
3
3
 
4
4
  どのようにしたらよろしいでしょうか?
5
5
  ご教授いただければ幸いです。
6
6
 
7
7
  ```Swift
8
+
8
9
  import UIKit
9
10
 
10
- class ModalViewController: UIViewController {
11
+ class ViewController: UIViewController, UITextFieldDelegate {
12
+
13
+ @IBOutlet weak var testLabel: UILabel!
14
+ @IBOutlet weak var textField: UITextField!
11
15
 
16
+ // レスポンスデータの構造
17
+ struct PostData: Codable {
18
+ var app_id : String
12
- @IBOutlet weak var convertText: UITextView!
19
+ var request_id : String
20
+ var sentence : String
21
+ var output_type : String
22
+ }
13
23
 
24
+ struct Rubi: Codable {
14
- var result = "テスト"
25
+ var request_id : String
26
+ var output_type : String
27
+ var converted : String
28
+ }
15
29
 
30
+ var sentence: String = ""
31
+
32
+
16
33
  override func viewDidLoad() {
17
34
  super.viewDidLoad()
35
+
36
+
37
+
38
+ textField.delegate = self
39
+
40
+ }
41
+
42
+ @IBAction func hiraganaConvertButton(_ sender: Any) {
18
43
 
19
- view.backgroundColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.5)
20
- convertText.text = result
21
- print(result)
44
+ print(sentence)
45
+ sentenceChange()
46
+ testLabel.text = sentence
47
+
22
48
  }
49
+ // ModalViewに値を渡す
50
+ override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
51
+
52
+ let modalVC = segue.destination as! ModalViewController
53
+ modalVC.result = sentence
54
+ }
23
55
 
56
+ // ひらがなに変換
24
- @IBAction func backButton(_ sender: Any) {
57
+ func sentenceChange() {
58
+ if textField.text != nil {
59
+ var request = URLRequest(url: URL(string: "https://labs.goo.ne.jp/api/hiragana")!)
60
+ request.httpMethod = "POST"
61
+ request.addValue("application/json", forHTTPHeaderField: "Content-Type")
62
+
63
+ let postData = PostData(app_id: "APIキー",request_id: "record003", sentence: textField.text!, output_type: "hiragana")
64
+
65
+ guard let uploadData = try? JSONEncoder().encode(postData) else {
66
+ print("失敗しました")
67
+ return
68
+ }
69
+ let task = URLSession.shared.uploadTask(with: request, from: uploadData) { data, response, error in
70
+ if let error = error {
71
+ print("error:(error)")
72
+ return
73
+ }
74
+
75
+ guard let data = data, let jsonData = try? JSONDecoder().decode(Rubi.self, from: data) else {
76
+ print("json変換に失敗しました")
77
+ return
78
+ }
79
+ print(jsonData.converted)
80
+ }
81
+ task.resume()
82
+ }else{
83
+ print("文章を入力してね")
84
+ }
25
85
 
26
- dismiss(animated: true, completion: nil)
27
-
28
86
  }
87
+
88
+ // キーボードを閉じる
89
+ func textFieldShouldReturn(_ textField: UITextField) -> Bool {
90
+ textField.resignFirstResponder()
91
+ return true
92
+ }
93
+
29
94
  }
30
95
 
96
+
97
+
98
+
99
+
31
100
  ```