質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

3278閲覧

TextFieldに入力された数字の合計をLabelに表示したい

hik_

総合スコア42

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

1グッド

1クリップ

投稿2019/01/31 12:06

編集2019/02/01 10:04

前提・実現したいこと

TextFieldに入力された数字がLabelをラベルに表示して、もう一度TextFieldに入力された数字を前回の数字が反映されているLabelに加算していく機能を作っています。
イメージ説明
以下のコードだとTextFieldに入力された文字がLabelに表示される までは良いのですが、もう一度TextFieldに数字を入れるとLabelには2度目にTextFieldに入れた数字で、前に入力された数字に2回目に入力した数字が加算されていない状態になってしまいます。

該当のソースコード

import UIKit class nextViewController: UIViewController { @IBOutlet weak var textField: UITextField! override func viewDidLoad() { super.viewDidLoad() // textFieldの入力方法をナンバーパッドに設定 textField.keyboardType = UIKeyboardType.numberPad } @IBAction func okButton(_ sender: Any) { } override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "aSegue" { let viewcon = segue.destination as! ViewController viewcon.aText = textField.text } } ```
import UIKit class ViewController: UIViewController { var aText:String? @IBOutlet weak var label: UILabel! override func viewDidLoad() { super.viewDidLoad() guard self.aText != nil else { return } self.label.text = aText! } }

試したこと

実装方法を調べたところ、実装するのに正しいのかは分からないのですが、TextFieldに入力された数字を配列に入れてreduceというメソッドで合計を出し、その合計をViewControllerのLabelに表示するという事で実装出来るかもと分かり、試行錯誤しているのですが実装に至っていません。
現在reduceの使い方や実装について以下のように書いて試しているのですが、実装出来ていない状態です。
ご教授頂けると幸いです。

var numberBox = [String]()
@IBAction func okButton(_ sender: Any) { numberBox.append(textField.text!) let sum = numberBox.reduce(0) {(num1, num2) -> Int in Int(num1!) + Int(num2!) // エラー Cannot force unwrap value of non-optional type 'String' } }

###追記
ViewController

import UIKit class ViewController: UIViewController { var bText:String? @IBOutlet weak var label: UILabel! override func viewDidLoad() { super.viewDidLoad() guard self.bText != nil else { return } self.label.text = bText! } }

nextViewController

import UIKit var aText:Int = 0 class nextViewController: UIViewController { @IBOutlet weak var textField: UITextField! override func viewDidLoad() { super.viewDidLoad() // textFieldの入力方法をナンバーパッドに設定 textField.keyboardType = UIKeyboardType.numberPad } @IBAction func okButton(_ sender: Any) { let textF = Int(textField.text!) let keisan = aText + textF! textField.text = String(keisan) } override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "aSegue" { let ViewCon = segue.destination as! ViewController ViewCon.bText = textField.text } } }

補足情報(FW/ツールのバージョンなど)

Swift4 Xcode10

DrqYuto👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

難しく考えずに、グローバル変数としてIntの変数を設定し、初期値を0にし、
ボタンを押すたびにtextfieldの中身をその変数に足し算し、
表示すればいいと思います。

流れは
①グローバル変数作成
ボタンの機能で、
②textField(String)->Int に変換
③Int同士を計算(Int)
④計算結果(Int)->textField.text(String) に変換

です。

投稿2019/01/31 18:40

hameji001

総合スコア639

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hik_

2019/02/01 10:06

ご回答ありがとうございます。 実装してみたところ、1度目は問題なくLabelに反映されるのですが、2度目は1度目+2度目の数字が反映されず2度目の数字だけが表示される状態です。 質問内にコードを追記しました。 ご教示頂けると幸いです。宜しくお願いします。
hameji001

2019/02/01 12:19 編集

let keisan = aText + textF! この行が間違ってます。 上記だといつまでもaTextに値は代入されないので、 aTextは0のままです。 プログラミングに馴染みがないと多少違和感を感じると思いますが、 aText = aText + textF! とするべきです。 以前の値(Int)に現在の入力値を足したものを新たな変数(Int)とするです。 そして、そのaTextをtextField.textに表示するようにしてください。
hik_

2019/02/05 13:11

ご返信ありがとうございます。 実装してみます。
hik_

2019/02/14 12:01

ご回答通りコードを書いてみたところ実装出来ました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問