我有一个方法,当给定一个未设置的浮点数而不是一个值为0的浮点数时,需要做一个不同的事情。基本上,我需要检查一个变量是否已经存在,如果它有一个变量,则将它计算为set值为0.
所以,我应该使用哪个占位符作为未设置值(nil,NULL,NO等)和如何测试以查看变量是否未设置而不返回如果值为0,则为true?
答案 0 :(得分:16)
您可以将浮动内容初始化为NaN(例如,通过调用nan()
或nanf()
),然后使用isnan()
进行测试,如果它们已更改为保留数字。 (请注意,测试myvalue == nan()
将不工作。)
这很简单(在任何情况下你都可能包括math.h
)并且在概念上是明智的:任何未设置为数字的值都是“不是数字”......
答案 1 :(得分:3)
当变量合法地获得该常量的值时,使用常量值来指示未设置状态通常会导致错误。
考虑使用NSNumber
存储您的浮动广告。这样它不仅可以nil
,而且会默认为该状态。
这假设您只需要少量浮动。如果您需要数百万,NSNumber
可能太慢并且内存密集。
答案 2 :(得分: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的setter也分配Y,反之亦然。或者,如果X和Y如此紧密地链接,您可以根据另一个的值计算一个,那么您实际上只需要一个变量用于两个属性。