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

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

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

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

Q&A

0回答

439閲覧

【swift】tableview内のセル表示で、guard文内で定義した変数の値を入れられる方法があれば知りたいです。

teshiyasato

総合スコア2

Swift

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

0グッド

0クリップ

投稿2021/03/27 01:28

Swiftを使ってiosアプリを作りたいです。
一つの画面で動くアプリを作りたいのですが、
テーブルビューのセルにguard文内のlet formulaText の値を入れたいです。
現状ではスコープ外の為、入れることが出来ないです。
どうにかして入れることは出来ないでしょうか?
コードの下の方につまづいている部分のtableview関数があります。
ご教授よろしくお願いいたします。

Swift

1import UIKit 2import Expression 3 4 5class ViewController: UIViewController ,UITableViewDelegate, UITableViewDataSource{ 6 7 8 @IBOutlet weak var formulaLabel: UILabel! 9 @IBOutlet weak var answerLabel: UILabel! 10 11 12 override func viewDidLoad() { 13 super.viewDidLoad() 14 // Do any additional setup after loading the view. 15 // ビューがロードされた時はラベル内を空にする 16 formulaLabel.text = "" 17 answerLabel.text = "" 18 19 } 20 21 22 //計算プログラム 23 24 @IBAction func inputFormula(_ sender: UIButton) { 25 // ボタン(Cと=以外)が押されたら式を表示する 26 guard let formulaText = formulaLabel.text else { 27 return 28 } 29 guard let senderedText = sender.titleLabel?.text 30 else { 31 return 32 } 33 34 formulaLabel.text = formulaText + senderedText 35 36 37 38 } 39 @IBAction func calculateAnswer(_ sender: UIButton) { 40 // =ボタンが押されたら答えを計算して表示する 41 guard let formulaText = formulaLabel.text else { 42 return 43 } 44 let formula: String = formatFormula(formulaText) 45 answerLabel.text = evalFormula(formula) 46 print(formulaText)//計算過程を÷や×で表した値をプリントして確認 47 // print(formula)これは計算過程(正規表現) 48 print(formulaLabel.text as Any) 49 50 51 } 52 53 private func formatFormula(_ formula: String) -> String { 54 // 入力された整数には`.0`を追加して小数として評価する 55 // また`÷`を`/`に、`×`を`*`に置換する 56 let formattedFormula: String = formula.replacingOccurrences( 57 of: "(?<=^|[÷×\+\-\(])([0-9]+)(?=[÷×\+\-\)]|$)", 58 with: "$1.0", 59 options: NSString.CompareOptions.regularExpression, 60 range: nil 61 ).replacingOccurrences(of: "÷", with: "/").replacingOccurrences(of: "×", with: "*") 62 //print(formattedFormula)//計算過程が正規表現でプリントされる 63 return formattedFormula 64 65 } 66 67 private func evalFormula(_ formula: String) -> String { 68 do { 69 // Expressionで文字列の計算式を評価して答えを求める 70 let expression = Expression(formula) 71 let answer = try expression.evaluate() 72 return formatAnswer(String(answer)) 73 } catch { 74 // 計算式が不当だった場合 75 return "正しく入力してください" 76 } 77 } 78 79 private func formatAnswer(_ answer: String) -> String { 80 // 答えの小数点以下が`.0`だった場合は、`.0`を削除して答えを整数で表示する 81 let formattedAnswer: String = answer.replacingOccurrences( 82 of: "\.0$", 83 with: "", 84 options: NSString.CompareOptions.regularExpression, 85 range: nil) 86 87 //print(formattedAnswer)//計算結果の値だけ出る 88 return formattedAnswer 89 90 } 91 92 @IBAction func clearCalculation(_ sender: UIButton) { 93 // ACボタンが押されたら式と答えをクリアする(ACボタンと繋がっている) 94 formulaLabel.text = "" 95 answerLabel.text = "" 96 } 97 //計算プログラム終わり 98 99 //tableview部分 100 override func didReceiveMemoryWarning() { 101 super.didReceiveMemoryWarning() 102 } 103 104 105 // @IBOutlet weak var cell: UIView! 106 var CalculationProcess = ["1番めのセル","2番めのセル", 107 "3番めのセル","4番目のセル","5番目のセル","5番目のセル","6番目のセル"] 108 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 109 return CalculationProcess.count 110 } 111 112 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 113 // セルを取得する 114 let cell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) 115 // セルに表示する値を設定する(計算過程と=とその結果を入れる) 116 cell.textLabel!.text = CalculationProcess[indexPath.row]//←ここのCalculationProcess[indexPath.row]のセル内に表示される値を行53の let formulaText の値を入れたいです。 117 return cell 118 } 119 //tableview部分終わり 120} 121 122

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

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

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

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

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

hoshi-takanori

2021/03/27 05:27

「行53」はどこでしょうか? (残念ながら teratail の質問文には行番号が表示されないので、どの行のことか分かりません。) また、tableView にはセルが 7 個表示されると思いますが、それぞれにどんな値を入れたいのでしょうか?
teshiyasato

2021/03/27 05:42

失礼しました。 cell.textLabel!.text = CalculationProcess[indexPath.row]の行になります。 計算機のプログラムを作っています。 セルが7個表示されるのですが、ひとまず一個のセルに @IBAction func calculateAnswer(_ sender: UIButton)関数の、計算過程(100+100など) の値を入れたいのですが参照の仕方がわからずにいます。
hoshi-takanori

2021/03/27 05:44

formulaText の値をいったん ViewController のプロパティに保存する必要があります。 例えば CalculationProcess[0] = formulaText でいかがでしょうか。
teshiyasato

2021/03/27 06:52

すみません、値渡しの理解不足だと思うのですが、ViewControllerのプロパティに保存する方法がわからないです。。
mskRR

2021/03/28 03:25

CalculationProcessの例えば"1番めのセル"を"AAA"に書き換えて、tableView.reloadRowで0番目のセルをリロードすれば、cellのテキストラベルの値が変わるって仕組みを利用すれば良いと思いますが。
teshiyasato

2021/05/17 14:16

確認が遅くなってしまい申し訳ありません。 CalculationProcess[0] = formulaText で反映されました! リロードする方も試してみます! 皆さまご回答いただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問