2019年7月16日火曜日

Singletonを使ったオブジェエク間の情報共有

電卓も機能が複雑になってくると、設定した変数を使った計算が必要になってきます。

具体的には、話題の「消費税」ですね。欧州などではVATとも言いますが、年々あがっていくので(?)、設定を変える必要があります。

設定情報は、iPhoneの場合「設定(setting)」画面から変更する場合もありますが、アプリから離れてしまうので使い勝っては今ひとつです。

ファイルを使って受け渡す方法もありますが、そんなに大量でなければアプリ内ではSingletonといって、インスタンスを共有する形で情報を受け渡すことになります。

Objective-Cでの実装方法はわかりますが、Swiftでの記述がどうなるか不明でしたので、ググってみたところ確認できました。

シングルトンのオブジェクトは次のように記述するようです。ここでのrateが共有する値になります。ここをタプルだとか、その他のオブジェクトにしてもいいかと思います。

class Tax: NSObject{
    var rate: String
    static let sharedTax: Tax = Tax()
    private override init(){
        rate = "10"
    }
}

このshardTaxというプロパティを呼び出すことでインスタンスがなければインスタンスを生成し、インスタンスがあれば特に生成せず既存のインスタンスがだけが、唯一つかわれるようです。また、initがprivateで記述されるために、2回目のオブジェクトの定義時にもデータは初期化されないようです。

では、インスタンスの利用側はどのように書くかというと、

    private let tax = Tax.sharedTax

ということで、taxというTaxインスタンスをTaxオブジェクトのshardTaxというプロパディで指定する、という文法らしいです。

これでなぜ記述できるのかは理解できていませんが、いまのところそう覚えるしかなさそうです。

実行の結果はこんな感じになります(Operatoer4のvが10%消費税を加えたところです)

0
1
1.
1.2
1.23
1.234
-1.234
-1.2340
Operater5 *
Operater2 /
Operater2 -
0.
0.1
0.10
Operater3 %
0.001
0.0010
0.00101
0.001010
Operater4 v
0.001111
Operater5 +
-1.235111
Operater2 -
Operater1 -=
0
Operater1 -=
1.235111
Operater1 -=
2.470222
Operater1 -=
3.705333

とりあえず演算子は一通り揃えたかな、というところで、次は有効桁の機能をつけくわえて行きたいと思います。

0 件のコメント: