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

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

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

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

Q&A

解決済

1回答

368閲覧

swift の足し算でラベルを自動で更新する方法を教えてください

KTH

総合スコア86

Swift

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

0グッド

0クリップ

投稿2018/08/28 14:13

swiftで足し算をしてラベルに答えを表示するコードを書こうとしています
ですが、なぜかString をIntに変換できないし、ボタンを押さずに自動で表示する方法もわかりません

toIntじゃStringを変換できないんですか?
また、自動で表示するのは何というのですか?

import UIKit

class ViewController: UIViewController,UITextFieldDelegate {

@IBOutlet weak var left: UITextField! @IBOutlet weak var right: UITextField! @IBOutlet weak var answ: UILabel! override func viewDidLoad() { super.viewDidLoad() left.text = "ここに " right.text = "入力 " left.delegate = self right.delegate = self answ.text = "答え" self.view.addSubview(answ) func textFieldDidBeginEditing(_ textField: UITextField) { print("textFieldDidBeginEditing: (left.text!)") } func rightDidBeginEditing(_ textField: UITextField) { print("textFieldDidBeginEditing: (right.text!)") } func textFieldDidEndEditing(_ textField: UITextField) { print("textFieldDidEndEditing: (left.text!)") } func rightFieldDidEndEditing(_ textField: UITextField) { print("textFieldDidEndEditing: (right.text!)") } answ.text = left.text } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. }

}

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

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

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

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

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

t_obara

2018/08/28 15:47

自動といっても、何らかのイベントが必要なのですが、何をキッカケに計算結果を表示させるのでしょうか?
fuzzball

2018/08/29 00:13

なぜ toInt で出来ると思ったのでしょうか?
guest

回答1

0

ベストアンサー

やるならば、「textFieldDidEndEditing」(テキストフィールドの入力が完了)のタイミングでやれば問題無いと思います。

intへの変換はInt()でできるのではないかと。
https://i-app-tec.com/ios/int-string-double.html#2

投稿2018/08/28 16:30

編集2018/08/28 16:31
Tomochika_Tomo

総合スコア166

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

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

KTH

2018/08/29 03:47

エラーが出てしまうのですが何が問題なのでしょうか? stringをIntにしてstringにまた戻すのですよね?
harumi

2018/08/29 06:02

どんなエラーが出ているのか書かないと答えようがないと思いますよ
KTH

2018/08/29 07:33

var left:String = " " var left1:Int = Int(left)! と書き込むと Cannot capture 'left' before it is declared というエラーがでます
Tomochika_Tomo

2018/08/29 09:43

単純に以下の2文を記載した場合はそのエラーは出てこないと思います。 >>var left:String = " " >>var left1:Int = Int(left)! 現状のソースコードの全文とかってのせられますか?
fuzzball

2018/08/29 09:54

>>Cannot capture 'left' before it is declared このエラーを消すだけなら var left:String = " " の left を他の名前にすればいいです。
KTH

2018/08/29 11:40

現状はこんなかんじです import UIKit class ViewController: UIViewController,UITextFieldDelegate { @IBOutlet weak var left: UITextField! @IBOutlet weak var right: UITextField! @IBOutlet weak var answ: UILabel! override func viewDidLoad() { super.viewDidLoad() left.text = "ここに " right.text = "入力 " left.delegate = self right.delegate = self answ.text = "答え" self.view.addSubview(left) self.view.addSubview(right) self.view.addSubview(answ) left.keyboardType = UIKeyboardType.decimalPad right.keyboardType = UIKeyboardType.decimalPad func textFieldDidBeginEditing(_ textField: UITextField) { print("textFieldDidBeginEditing: (left.text!)") } func textFieldDidEndEditing(_ textField: UITextField) { print("textFieldDidEndEditing: (left.text!)") } func rightDidBeginEditing(_ textField: UITextField) { print("textFieldDidBeginEditing: (right.text!)") } func rightFieldDidEndEditing(_ textField: UITextField) { print("textFieldDidEndEditing: (right.text!)") } left:String = " " left1:Int = Int(left)! } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }
Tomochika_Tomo

2018/08/29 14:34

コードだけの話でいけばこれで動くと思います。 ¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥ func textFieldDidEndEditing(_ textField: UITextField) { print("textFieldDidEndEditing: (left.text!)") guard let rightNum = Int(right.text!) else { return } guard let leftNum = Int(left.text!) else { return } answ.text = String(rightNum + leftNum) } ¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥ そもそもでいうと、記載いただいたVCの処理について色々と正確に書けていないところが気になります。 ・viewDidLoadのブロック内に「func textFieldDidEndEditing」等の処理が入ってしまっている。 →viewDidLoadのブロックの外に記載してください。 ・「rightDidBeginEditing」、「rightFieldDidEndEditing」の処理の用途が不明 →TextFieldのDelegateに上記のメソッドはありません。TextFieldを複数宣言したとしても、呼ばれるメソッドはUITextFieldDelegateのプロトコルに宣言されたメソッドのみ(textFieldDidEndEditing等)です。
KTH

2018/08/29 16:49

回答ありがとうございます プログラミング初心者なのですが、始めた当初は「数字2つたして答え表示するだけだから楽勝だろ」と思って甘く考えていたのですが、調べれば調べるほどわけがわからなくなり最後には3つか4つの個人サイトの情報をツギハギしたよくわからないコピペコードになってしまいました 書き直ししてみました、間違いがあれば教えてください class ViewController: UIViewController,UITextFieldDelegate { override func viewDidLoad() { super.viewDidLoad() left.text = "ここに " right.text = "入力 " answ.text = "答え" left.delegate = self right.delegate = self self.view.addSubview(left) self.view.addSubview(right) self.view.addSubview(answ) left.keyboardType = UIKeyboardType.decimalPad right.keyboardType = UIKeyboardType.decimalPad } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } @IBOutlet weak var left: UITextField! @IBOutlet weak var right: UITextField! @IBOutlet weak var answ: UILabel! func textFieldDidEndEditing(_ textField: UITextField) { print("textFieldDidEndEditing: (left.text!)") guard let rightNum = Int(right.text!) else { return } guard let leftNum = Int(left.text!) else { return } answ.text = String(rightNum + leftNum) } } シミュレーターでleftとrightの欄に数字をいれると、なにかのきっかけで計算されますが、書き換えるたびに再計算されません何が問題なんでしょうか? なにをきっかけで動いているのでしょうか?
KTH

2018/08/29 16:50

解決しました もう一方の枠に触れると計算されました
KTH

2018/08/29 16:51

Tomochika_Tomoさん数回に渡る回答本当にありがとうございました これまでテラテイルで何回か質問しましたがTomochika_Tomoさんのように丁寧に答えてくださる方はいませんでした Tomochika_Tomoさん本当にありがとうございました
Tomochika_Tomo

2018/08/29 23:14

添付いただいたコードでいうと、addSubviewは不要だと思います。 ※addSubviewはコード上で生成したTextfield等のオブジェクトを画面に反映させる処理のため。 今回で言えば、おそらく@IBOutletとついているのでstoryboard上でオブジェクトを配置しているかと思うので、2重に表示されちゃってるかもです。 解決されているようですが、念のためテキストフィールドに値が反映されるタイミングについては以下のサイトを参考にしてもらえればと思います。 https://qiita.com/kwst/items/f19a41120437779f6e7f >>もう一方の枠に触れると計算されました →この際コード上でどのように動いているのかを知っておく方が良いと思います。
Tomochika_Tomo

2018/08/29 23:22

プログラム、独学でやろうとするとなかなかに難しかったりしますよね… 何やっていいか、何を調べていいか分からないみたいな… 今後もプログラムやっていきたい!とかであれば、本を買って順序立てて学ぶか、Swift 入門とかで調べて、ミニマムのプログラムを作成しながら学ぶことをお勧めします。 基本をすっ飛ばして、個人サイトの情報を参考にしようとしても、どこまでの情報が自分に必要な情報なのか判別ききませんしね… あとは分からないことがある場合にも一気に自分のやりたいことをやろうとせずに、一つ一つクリアにしていく方が良いですよ。 今回で言えば、まずはテキストフィールドを一つ用意して、値の取得とInt型への変換を行ってみるとか。※この際に余計なコードはコメントアウトしておくこと そうすれば、現時点でなにに詰まっているのかわかりやすくなるので、質問もしやすいのかな〜と。 ながなが失礼しました。 頑張って下さい!
KTH

2018/08/30 00:53

ありがとうございます、プログラミングてもっと簡単なんじゃないかと思ってたんですが見通しが甘かったです。山で遭難する人と同じ発想で、ちょっとしたことだからすぐできるだろうと思っていたら完全にネットの情報のジャングルで遭難してました(笑 素人から見ると、Swiftの操作ってvarやらletやらに計算式や数字を代入してちゃちゃっと画面の色や画像やらを指定すればハイ完成と思っていたのですが、完全に甘かったですw パソコンのことだからネット上の情報が最新だろうと思っていましたがやはり本を買おうと思います Tomochika_Tomoさん本当にありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問