6

未設定のfloatを指定した場合、値が0のfloatとは異なることを行う必要があるメソッドがあります。基本的に、変数が設定されているかどうかを確認し、値が0の場合は設定済みとしてカウントする必要があります。 。

では、未設定の値(nil、NULL、NOなど)としてどのプレースホルダーを使用する必要がありますか?また、値0に対してtrueを返さずに変数が未設定であるかどうかをテストするにはどうすればよいですか?

4

3 に答える 3

16

フロートをNaNに初期化して(たとえば、nan()またはを呼び出すことによって) 、数値を保持するように変更されているかどうかをnanf()テストできます。isnan()(テストmyvalue == nan()は機能しないことに注意してください。)

これはかなり単純であり(おそらくどのような場合でも含めるでしょうmath.h)、概念的に賢明です。数値に設定されていない値は「数値ではない」...

于 2012-04-17T02:28:19.250 に答える
3

定数値を使用して未設定の状態を示すと、変数がその定数の値を合法的に取得するときにエラーが発生することがよくあります。

NSNumberフロートの保管に使用することを検討してください。そうすればnil、それはであるだけでなく、デフォルトでその状態になります。

これは、必要なフロートの数が少ないことを前提としています。何百万ものそれらが必要な場合は、NSNumber遅すぎてメモリを大量に消費する可能性があります。

于 2012-04-17T02:27:32.680 に答える
2

floatこれらのプロパティをオーバーロードする(XおよびYと呼びましょう)代わりに、isValidプロパティごとに個別のフラグを作成します。フラグを初期化して、フロートが設定されていないことを示し、フラグを適切に管理するための独自のセッターを提供します。したがって、コードは次のようになります。

if (self.isXValid == YES) {
    self.Y = ... // assigning to Y sets isYValid to YES
}
else if (self.isYValid == YES) {
    self.X = ... // assigning to Y sets isXValid to YES
}

実際にはさらに一歩進んで、XのセッターにYを割り当てさせることも、その逆も可能です。または、XとYが非常に密接にリンクされているため、一方を他方の値に基づいて計算できる場合は、実際には両方のプロパティに1つの変数のみが必要です。

于 2012-04-17T03:56:47.880 に答える