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

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

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

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

Q&A

解決済

1回答

463閲覧

複数のTextFieldに入力した複数の値を関数で利用して演算結果をTextに表示させたい

matubokkuri

総合スコア5

Swift

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

0グッド

0クリップ

投稿2023/02/21 10:41

編集2023/02/21 10:47

実現したいこと

・String型の複数の変数をまとめてInt型へキャストして演算結果をText表示させたい
・この方法をとらずに他の方法があれば教えていただきたいです。

前提

このようなアプリをswiftUIで実装しています。
・5つのtextFieldに値を入力してButtonをタップすると演算結果(加算)がテキストに表示する計算アプリ

ここに質問の内容を詳しく書いてください。

発生している問題・エラーメッセージ

[問題]
・関数を定義し、5つのtextFieldの変数をまとめてInt型へキャストして演算を行ったところ、文字列が連結した状態でキャストしているので加算が行われないという問題が発生しました。2つtextFieldに1と1をそれぞれ入力してButtonをタップすると11と表示してしまう。

[実現したいこと]
これを2と表示できるようにしたいです。
他にこういうやり方の方が簡単であったり、こういうやり方も存在するなどの方法があればご教授いただけたらと思っています。

該当のソースコード

swiftUI

1import SwiftUI 2 3struct ContentView: View { 4 5 @State var textFieldOne = "" 6 @State var textFieldTwo = "" 7// @State var textFieldThree = "" 8// @State var textFieldFour = "" 9// @State var textFieldFive = "" 10 @State var result = "Label" 11 @State var num = 2 12 13 var body: some View { 14 15 VStack { 16 Group { 17 TextField("", text: $textFieldOne) 18 19 TextField("", text: $textFieldTwo) 20// 21// TextField("", text: $textFieldThree) 22// 23// TextField("", text: $textFieldFour) 24// 25// TextField("", text: $textFieldFive) 26 } 27 .textFieldStyle(.roundedBorder) 28 .frame(width: 120) 29 .keyboardType(.numberPad) 30 31 Button(action: { 32 num = calc() 33 result = String(num) 34 35 }, label: { 36 Text("Button") 37 }) 38 .padding() 39 40 Text(result) 41 } 42 } 43 44 func calc() -> Int { 45 //textFieldOneの値とtextFieldTwoの値が文字列により連結した状態からでキャストしている。これを改善しないといけない。そのためにはキャストした状態から加算式を定義してあげないといけない 46 if let result = Int(textFieldOne + textFieldTwo) { 47 return result 48 } else { 49 return -1 50 } 51 } 52} 53
### 試したこと 現在進行中です。

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

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

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

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

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

guest

回答1

0

ベストアンサー

次のように変更すると良いかもしれません。
申し訳ございませんが、良い代替案は思いつきません。

SwiftUI

1import SwiftUI 2 3struct ContentView: View { 4 5 @State var textFieldOne = "" 6 @State var textFieldTwo = "" 7// @State var textFieldThree = "" 8// @State var textFieldFour = "" 9// @State var textFieldFive = "" 10 @State var result = "Label" 11 @State var num = 2 12 13 var body: some View { 14 15 VStack { 16 Group { 17 TextField("", text: $textFieldOne) 18 19 TextField("", text: $textFieldTwo) 20// 21// TextField("", text: $textFieldThree) 22// 23// TextField("", text: $textFieldFour) 24// 25// TextField("", text: $textFieldFive) 26 } 27 .textFieldStyle(.roundedBorder) 28 .frame(width: 120) 29 .keyboardType(.numberPad) 30 31 Button(action: { 32 num = calc() 33 result = String(num) 34 35 }, label: { 36 Text("Button") 37 }) 38 .padding() 39 40 Text(result) 41 } 42 } 43 44 func calc() -> Int { 45 //下記を変更 46 if let result1 = Int(textFieldOne), let result2 = Int(textFieldTwo) { 47 return result1 + result2 48 } else { 49 return -1 50 } 51 } 52}

投稿2023/02/24 02:05

uni3

総合スコア37

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

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

matubokkuri

2023/02/26 10:20

回答ありがとうございます! if letの後の記述の箇所で result1, result2と複数定義できることを理解できていなかったです。 またよろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問