SwiftUIで行こう! 電卓を作ろ!-効率的に!
仕組みを整理していき効率よく計算ができるようにします。。以下参考にしています。
https://www.youtube.com/watch?v=hBO81LgQcJM
ここではまず記号が入力された場合にすることが決めてある部分を再定義していきます。
別ファイル管理として、CalcBrain.swiftというファイルを作ります。
構造としては以下
struct CalcBrain {
var accumulator:Double?
func performOperation(_ symbol:String){
}
func setOperand(_ operand:Double){
accumulator = operand
}
var result:Double?{
get {
return accumulator
}
}
}
としています。
新しい変数
var accumulator:Double?
を作ってまずは値をこの変数に入れて、
var result:Double?{
get {
return accumulator
}
}
で最終的には 変数"result"に入れて、表示部分にデータを引き渡します。
struct UnarySymbols:View{}の
func performOperation(_ symbol:String){
}
の中身、以前に作っていたswitch文です。
switch symbol {
case "π":
calcVM.displayValue = Double.pi
calcVM.middleTyping = false
case "√":
calcVM.displayValue = sqrt(calcVM.displayValue)
calcVM.middleTyping = false
default:
break
}
別ファイルで作ったstruct CalcBrain {}を編集します。
func performOperation(_ symbol:String){
}
同じ名前の関数に入れます。
func performOperation(){}を変更していきます。
mutating func performOperation(_ symbol:String){
switch symbol {
case "π":
accumulator = Double.pi
case "√":
if let operand = accumulator{
accumulator = sqrt(operand)
default:
break
}
}
そしてstruct UnarySymbols:View{}を別ファイルのCalcBrainを使えるようにします。
@Binding var brain:CalcBrain
Button(mathSymbol,action:{})のコードをCalcBrainのメッソドに変更します。
self.brain.setOperand(self.calcVM.displayValue){
self.calcVM.middleTyping = false
self.brain.setOperand(self.calcVM.displayValue)
self.brain.performOperation(mathSymbol)
if let result = self.brain.result{
self.calcVM.displayValue = result
}
self.brain.setOperand(self.calcVM.displayValue)
で表示されている値をセットします。
self.brain.performOperation(mathSymbol)
で演算、計算されて表示します。
if let result = self.brain.result{
self.calcVM.displayValue = result
ここで、
var result:Double?{
get {
return accumulator
}
}
これで、accumulatorからresultへデータを代入してデータを
self.calcVM.displayValue
に代入することで表示される仕組みです。
注意点ですがstruct ContentView: View{}のUnarySymbols()の中のコードで
UnarySymbols() → UnarySymbols(brain: $brain)
と変更しておかないとエラーが出ます。
ここまでで大部分struct CalcBrain {}を利用したコードの書き換えは終わりです。
この記事が気に入ったらサポートをしてみませんか?