サイトアイコン BergamotMagic

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

Swift5+Xcode11.6

シリーズ3の3回目です。

今回のゴール

 続きです。下の動画のように、デンタッキーの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 <> ba != b
演算式

 後半はあまり変わっていないのですが、一応全部掲載しました。前回までと違い、押されたボタンによって処理を分岐させる必要があるため、ユーザー定義関数outputStr()に引数tmpStr(String型)を加えました。それに伴い、各ボタンのaction文も変更しました。例えば、7キーを押した時は、self.outputStr(tmpStr: “7”)とtmpStrに”7″を格納して、outputStr()に渡すようにしました。
 そして、outputStr()でtmpStrの値を確認し、“C”の場合は配列を空にして、入力結果表示用のテキストフィールドも”0″になるようにし、それ以外の場合は、従来どおり配列に加える処理を行うようにしました。
 if構文の比較式の記載の仕方がVBA等とは少し違うので、慣れが必要です。

次回は

 =を押したら、計算させるようにします。

モバイルバージョンを終了