6

我有一个方法,当给定一个未设置的浮点数而不是值为 0 的浮点数时,我需要做不同的事情。基本上,我需要检查一个变量是否已经存在,如果它的值为 0,则将其计数为设置.

那么,我应该使用什么占位符作为未设置值(nil、NULL、NO 等)以及如何测试变量是否未设置而不返回值为 0 的 true?

4

3 回答 3

16

您可以将您的浮点数初始化为 NaN(例如通过调用nan()or 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 密切相关,以至于您可以根据另一个的值来计算一个,那么您实际上只需要一个变量来处理这两个属性。

于 2012-04-17T03:56:47.880 回答