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
「行53」はどこでしょうか? (残念ながら teratail の質問文には行番号が表示されないので、どの行のことか分かりません。)
また、tableView にはセルが 7 個表示されると思いますが、それぞれにどんな値を入れたいのでしょうか?
失礼しました。
cell.textLabel!.text = CalculationProcess[indexPath.row]の行になります。
計算機のプログラムを作っています。
セルが7個表示されるのですが、ひとまず一個のセルに
@IBAction func calculateAnswer(_ sender: UIButton)関数の、計算過程(100+100など)
の値を入れたいのですが参照の仕方がわからずにいます。
formulaText の値をいったん ViewController のプロパティに保存する必要があります。
例えば CalculationProcess[0] = formulaText でいかがでしょうか。
すみません、値渡しの理解不足だと思うのですが、ViewControllerのプロパティに保存する方法がわからないです。。
CalculationProcessの例えば"1番めのセル"を"AAA"に書き換えて、tableView.reloadRowで0番目のセルをリロードすれば、cellのテキストラベルの値が変わるって仕組みを利用すれば良いと思いますが。
確認が遅くなってしまい申し訳ありません。
CalculationProcess[0] = formulaText で反映されました!
リロードする方も試してみます!
皆さまご回答いただきありがとうございました。
あなたの回答
tips
プレビュー