おそるおそる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等とは少し違うので、慣れが必要です。
次回は
=を押したら、計算させるようにします。