他の人が示唆しているように、計算のどこにいるかを追跡するには、いくつかのモデル構造(たとえば、いくつかのクラスプロパティ)が必要です。ただし、電卓のメモリレジスタを追跡する必要がある場合は、次のようなプロパティがあります。
@property (nonatomic) double memoryValue;
したがって、たとえば、そのプロパティを取得し、ユーザーが、、、、またはをヒットしmemoryValue
たかどうかに応じて、追加、減算、クリア(ゼロに設定)、または値の取得を行います。個人的には物件も考えますが、行く必要はないと思います。m+m-mcmrNSNumber
多分私はあなたの質問を理解していません。
I have to confess that I was more worried by your line of code where you're getting your currentValue
from screenLabel.text
. You really do not want to retrieve data that is intrinsic to the operation of your app from a user-interface control like a UILabel
, which is solely designed for the presentation of information. This implies a fundamental confusion about how MVC, or Model-View-Controller, apps are designed. The values that drive the calculations (e.g. the current value, the memory value, etc.) are part of the model (possibly stored as properties of some model
object). The UILabel
that presents the currently calculated value, is part of the view.
It's not a good idea to use the UILabel
(part of the view) to drive calculations. Your app should be maintaining a model for the app's data/operations, and the view should just be a presentation of that model (not the other way around).
電卓アプリは、ここでの実際的な考慮事項のすばらしい例です。たとえば、電卓に「科学/指数表記モード」がある場合があります(1,200,000,000は「1.2e9」と表示される場合があります)。または、1000の区切り文字としてコンマを使用して数値を表示している可能性があります(100万は「1,000,000.00」と表示されます)。text
のプロパティのフォーマットは、さまざまな要因によって決まる可能性があります。計算目的で値をUILabel
使用する場合は、文字列のフォーマットについて心配する必要はありません。double
もう1つの優れた例は、表示される桁数が、アプリが横向き(小数点以下の桁数が多いスペースがある)か縦向き(スペースが少ないため、表示される小数点以下の桁数が少ない)かどうかの関数です。縦向きの画面に表示するスペースが少なかったという理由だけで、アプリが記憶する桁数が少なくなることはありません。ビューのユーザーインターフェイスが変更されても、基になるモデルの実際の計算値は変更されません。そして、それにもかかわらず、モデルはおそらく、ユーザーインターフェイスに表示したいより多くの「有効数字」を常に使用します。
しかし、うまくいけば、これらの例は、アプリのモデルとビューの違いを理解するのに役立ちます。つまり、から値を取得するのは賢明ではありませんUILabels
。アプリのモデルに実際の値(しゃれは意図されていません)を保持します。