swift
1import UIKit 2 3class ViewController: UIViewController { 4 5 6 @IBOutlet weak var calcProc: UITextView! 7 @IBOutlet weak var rsltlbl: UILabel! 8 var dataSource = DataSource() 9 var previousNumber: Double = 0 10 var operation = 0 11 12 @IBAction func tapNum(_ sender: Any) { 13 //let text = (sender as AnyObject).tag == 10 ? "+" : String((sender as AnyObject).tag) 14 let text: String 15 if (sender as AnyObject).tag == 10 { 16 text = "." 17 }else{ 18 text = String((sender as AnyObject).tag) 19 } 20 21 dataSource.upDate(value: text) 22 labelUpdate() 23 } 24 25 @IBAction func calcItem(_ sender: Any) { 26 27 let text: String 28 29 if (sender as AnyObject).tag == 11 //Plus 30 { 31 text = "+" 32 } 33 else if (sender as AnyObject).tag == 12 //Multiply 34 { 35 text = "-" 36 } 37 else if (sender as AnyObject).tag == 13 //Minus 38 { 39 text = "×" 40 } 41 else if (sender as AnyObject).tag == 14//Divide 42 { 43 text = "÷" 44 } 45 else{ 46 text = String((sender as AnyObject).tag) 47 } 48 49 let num: Double = Double(dataSource.pText)! 50 operation = (sender as AnyObject).tag 51 52 if operation == 11 && (sender as AnyObject).tag != 1 && (sender as AnyObject).tag != 10 53 { 54 dataSource.pText = String(num + num); 55 } 56 if operation == 12 57 { 58 dataSource.pText = String(num - num); 59 } 60 if operation == 13 61 { 62 dataSource.pText = String(num * num); 63 } 64 if operation == 14 65 { 66 dataSource.pText = String(num / num); 67 } 68 dataSource.upDate(value: text) 69 labelUpdate() 70 71 72 }
やりたいこと
入力された値を計算したい。
if文で各記号タグが選択された時に計算せずに次に入力した値を元と最初に入力した値を計算したい
現状
+,-,*,/の記号を選択した時に計算されてしまう。
###困っていること
意図していないタイミングで計算されるため、計算結果がおかしくなる。
###改善したいこと
if文の書き方が的確でないため意図しない結果になっていると思うのでどのようにif文を書けばいいかを知りたい。
現コード
swift
1@IBAction func tapNum(_ sender: Any) { 2 //let text = (sender as AnyObject).tag == 10 ? "+" : String((sender as AnyObject).tag) 3 var text: String 4 if (sender as AnyObject).tag == 10 { 5 text = "." 6 }else{ 7 text = String((sender as AnyObject).tag) 8 } 9 10 dataSource.upDate(value: text) 11 labelUpdate() 12 13 let num: Double = Double(dataSource.pText)! 14 operation = (sender as AnyObject).tag 15 16 if operation == 0 && (sender as AnyObject).tag != 1 && (sender as AnyObject).tag != 10 17 { 18 if operation == 11 19 { 20 text = String(num + num) 21 } 22 if operation == 12 23 { 24 text = String(num - num) 25 } 26 if operation == 13 27 { 28 text = String(num * num) 29 } 30 if operation == 14 31 { 32 text = String(num / num) 33 } 34 } 35 if operation == 1 36 { 37 if operation == 11 38 { 39 text = String(num + num) 40 } 41 if operation == 12 42 { 43 text = String(num - num) 44 } 45 if operation == 13 46 { 47 text = String(num * num) 48 } 49 if operation == 14 50 { 51 text = String(num / num) 52 } 53 } 54 if operation == 2 55 { 56 if operation == 11 57 { 58 text = String(num + num) 59 } 60 if operation == 12 61 { 62 text = String(num - num) 63 } 64 if operation == 13 65 { 66 text = String(num * num) 67 } 68 if operation == 14 69 { 70 text = String(num / num) 71 } 72 } 73 if operation == 3 74 { 75 if operation == 11 76 { 77 text = String(num + num) 78 } 79 if operation == 12 80 { 81 text = String(num - num) 82 } 83 if operation == 13 84 { 85 text = String(num * num) 86 } 87 if operation == 14 88 { 89 text = String(num / num) 90 } 91 } 92 if operation == 4 93 { 94 if operation == 11 95 { 96 text = String(num + num) 97 } 98 if operation == 12 99 { 100 text = String(num - num) 101 } 102 if operation == 13 103 { 104 text = String(num * num) 105 } 106 if operation == 14 107 { 108 text = String(num / num) 109 } 110 } 111 if operation == 5 112 { 113 if operation == 11 114 { 115 text = String(num + num) 116 } 117 if operation == 12 118 { 119 text = String(num - num) 120 } 121 if operation == 13 122 { 123 text = String(num * num) 124 } 125 if operation == 14 126 { 127 text = String(num / num) 128 } 129 } 130 if operation == 6 131 { 132 if operation == 11 133 { 134 text = String(num + num) 135 } 136 if operation == 12 137 { 138 text = String(num - num) 139 } 140 if operation == 13 141 { 142 text = String(num * num) 143 } 144 if operation == 14 145 { 146 text = String(num / num) 147 } 148 } 149 if operation == 7 150 { 151 if operation == 11 152 { 153 text = String(num + num) 154 } 155 if operation == 12 156 { 157 text = String(num - num) 158 } 159 if operation == 13 160 { 161 text = String(num * num) 162 } 163 if operation == 14 164 { 165 text = String(num / num) 166 } 167 } 168 if operation == 8 169 { 170 if operation == 11 171 { 172 text = String(num + num) 173 } 174 if operation == 12 175 { 176 text = String(num - num) 177 } 178 if operation == 13 179 { 180 text = String(num * num) 181 } 182 if operation == 14 183 { 184 text = String(num / num) 185 } 186 } 187 if operation == 9 188 { 189 if operation == 11 190 { 191 text = String(num + num) 192 } 193 if operation == 12 194 { 195 text = String(num - num) 196 } 197 if operation == 13 198 { 199 text = String(num * num) 200 } 201 if operation == 14 202 { 203 text = String(num / num) 204 } 205 } 206 207 //dataSource.upDate(value: text) 208 //labelUpdate() 209 } 210 211 @IBAction func calcItem(_ sender: Any) { 212 213 let text: String 214 215 if (sender as AnyObject).tag == 11 //Plus 216 { 217 text = "+" 218 } 219 else if (sender as AnyObject).tag == 12 //Multiply 220 { 221 text = "-" 222 } 223 else if (sender as AnyObject).tag == 13 //Minus 224 { 225 text = "×" 226 } 227 else if (sender as AnyObject).tag == 14//Divide 228 { 229 text = "÷" 230 } 231 else{ 232 text = String((sender as AnyObject).tag) 233 } 234 235 dataSource.upDate(value: text) 236 labelUpdate() 237 238 }
色々試してみましたがどうしても意図したタイミングで計算されません。
処理の流れやどこを直せばいいか知りたいです。
電卓っぽいですが、+,-,*,/の記号を選択した時に計算『されてしまう』とあるので、違うのでしょうか。どのような画面があって、何をどうした時にどうなる予定が、こうなってしまう。という細かい仕様を記載して下さい。また、色々試したとありますが、何を試してどうなったのかを教えてください。
回答2件
あなたの回答
tips
プレビュー