おそるおそるSwift 2-3 デンタッキー(電卓)を作る ~クリアキーを機能させる~

Swift5+Xcode11.6
シリーズ3の3回目です。
おそるおそるSwift 2-2 デンタッキー(電卓)を作る ~入力結果を表示する~
Swift5+Xcode11.6 シリーズ2の2回目です。 今回のゴール 続きです。下の動画のように、デンタッキーがボタン入力結果を表示できるようにします。コードはContentView.swiftに書きました。 上 […]
今回のゴール
続きです。下の動画のように、デンタッキーのC(クリア)キーを機能させます。コードはContentView.swiftに書きました。
import SwiftUI struct ContentView: View { @State var inputArray :[String] = [] //キーボード入力内容を格納 @State var inputStr :String = "0" //表示用(配列の内容を全部並べた文字列 func outputStr(tmpStr :String) { var str1 :String = "" if tmpStr != "=", tmpStr != "C" { self.inputArray.append(tmpStr) for item in inputArray { str1 += item } self.inputStr = str1 } else if tmpStr == "C" { self.inputArray = [] self.inputStr = "0" } } var body: some View { VStack { Text("\(self.inputStr)") .font(.largeTitle) .fontWeight(.heavy) .foregroundColor(Color.red) .multilineTextAlignment(.trailing) .frame(width: 300.0) Spacer() .frame(width: 1.0, height: 20.0) HStack { HStack { Button(action: { self.outputStr(tmpStr: "7") }) { Text("7") .frame(width: 50.0, height: 50.0) .border(Color.black, width: 3) } Button(action: { self.outputStr(tmpStr: "8") }) { Text("8") .frame(width: 50.0, height: 50.0) .border(Color.black, width: 3) } Button(action: { self.outputStr(tmpStr: "9") }) { Text("9") .frame(width: 50.0, height: 50.0) .border(Color.black, width: 3) } } Button(action: { self.outputStr(tmpStr: "+") }) { Text("+") .frame(width: 50.0, height: 50.0) .border(Color.black, width: 3) } } Spacer() .frame(width: 1.0, height: 12.0) HStack { HStack { Button(action: { self.outputStr(tmpStr: "4") }) { Text("4") .frame(width: 50.0, height: 50.0) .border(Color.black, width: 3) } VStack { Button(action: { self.outputStr(tmpStr: "5") }) { Text("5") .frame(width: 50.0, height: 50.0) .border(Color.black, width: 3) } } Button(action: { self.outputStr(tmpStr: "6") }) { Text("6") .frame(width: 50.0, height: 50.0) .border(Color.black, width: 3) } } Button(action: { self.outputStr(tmpStr: "-") }) { Text("-") .frame(width: 50.0, height: 50.0) .border(Color.black, width: 3) } } Spacer() .frame(width: 1.0, height: 12.0) HStack { HStack { Button(action: { self.outputStr(tmpStr: "1") }) { Text("1") .frame(width: 50.0, height: 50.0) .border(Color.black, width: 3) } Button(action: { self.outputStr(tmpStr: "2") }) { Text("2") .frame(width: 50.0, height: 50.0) .border(Color.black, width: 3) } Button(action: { self.outputStr(tmpStr: "3") }) { Text("3") .frame(width: 50.0, height: 50.0) .border(Color.black, width: 3) } } Button(action: { self.outputStr(tmpStr: "=") }) { Text("=") .frame(width: 50.0, height: 50.0) .border(Color.black, width: 3) } } Spacer() .frame(width: 1.0, height: 12.0) HStack { HStack { Button(action: { self.outputStr(tmpStr: "0") }) { Text("0") .frame(width: 50.0, height: 50.0) .border(Color.black, width: 3) } Button(action: { self.outputStr(tmpStr: "00") }) { Text("00") .frame(width: 50.0, height: 50.0) .border(Color.black, width: 3) } Button(action: { self.outputStr(tmpStr: ".") }) { Text(".") .frame(width: 50.0, height: 50.0) .border(Color.black, width: 3) } } Button(action: { self.outputStr(tmpStr: "C") }) { Text("C") .frame(width: 50.0, height: 50.0) .border(Color.black, width: 3) } } Spacer() .frame(width: 1.0, height: 50.0) } } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } }
a > b | > |
a < b | < |
a >= b | >= |
a <= b | <= |
a = b | == |
a <> b | a != b |
後半はあまり変わっていないのですが、一応全部掲載しました。前回までと違い、押されたボタンによって処理を分岐させる必要があるため、ユーザー定義関数outputStr()に引数tmpStr(String型)を加えました。それに伴い、各ボタンのaction文も変更しました。例えば、7キーを押した時は、self.outputStr(tmpStr: “7”)とtmpStrに”7″を格納して、outputStr()に渡すようにしました。
そして、outputStr()でtmpStrの値を確認し、“C”の場合は配列を空にして、入力結果表示用のテキストフィールドも”0″になるようにし、それ以外の場合は、従来どおり配列に加える処理を行うようにしました。
if構文の比較式の記載の仕方がVBA等とは少し違うので、慣れが必要です。
次回は
=を押したら、計算させるようにします。