确定 NSUInteger 是否有值或为 nil
Determine if NSUInteger has a value or is nil
我正在尝试在 iOS 上使用 HKAnchoredObjectQuery
。
为此,我必须为查询提供一个锚点,在本例中为 NSUInteger
。我想在 NSUserDefaults
中保存此整数以供将来查询,只是想使用
if(anchor != nil) {
// do stuff
}
但是编译器告诉我不允许这样做,因为我正在将一个整数与一个指针进行比较,我明白为什么我不能这样做,但我不知道该怎么做它。
错误代码是这样的
Comparison between pointer and integer ('NSUInteger' (aka 'unsigned long') and 'void *')
有谁知道我如何确定我的锚点是否有价值?
NSUInteger
不是对象,不能与 nil 进行比较。用过于简单的术语来说,对象是指向可能包含值或 nil
的内存位置的指针。 NSUInteger
只是一个值。它可能是 0
,或者您不期望的其他一些值,但它会有一个值。
一个NSUInteger
不能为nil,因为它不是一个对象。创建时的默认值为零。要保存在 NSUserDefaults
中,您可以将其存储为 NSNumber
,稍后可以检查它是否为 nil。
存储在NSUserDefaults
:
NSNumber *aNumber = @(anchor);
[[NSUserDefaults standardUserDefaults] setObject:aNumber forKey:aKey];
要从 NSUserDefaults
取回锚点:
NSNumber *aNumber = [[NSUserDefaults standardUserDefaults] objectForKey:aKey];
if (aNumber != nil) {
NSUInteger anchor = [aNumber integerValue];
}
NSUInteger 是原始类型,不是对象类型。 NSNumber 是一种对象类型。对于 NSNumber 对象,您可以检查它是否为 nil。 NSUInteger 永远不会为 nil,因为它是整数,而不是指针。
许多函数 return NSUInteger 作为搜索的结果 return 如果搜索失败则常量 NSNotFound。 NSNotFound 被定义为一个非常大的整数(32 位为 2^31 - 1,64 位为 2^63 - 1)。
NSUInteger
或简称 int 基本上是原始数据类型,它们应该与相应数据类型范围内的整数值进行比较。 nil 与引用对象一起使用。
在你的例子中,锚点是 NSUInteger
所以你应该使用整数值来代替 nil as-
if(anchor != 0) {
// do stuff
}
我正在尝试在 iOS 上使用 HKAnchoredObjectQuery
。
为此,我必须为查询提供一个锚点,在本例中为 NSUInteger
。我想在 NSUserDefaults
中保存此整数以供将来查询,只是想使用
if(anchor != nil) {
// do stuff
}
但是编译器告诉我不允许这样做,因为我正在将一个整数与一个指针进行比较,我明白为什么我不能这样做,但我不知道该怎么做它。
错误代码是这样的
Comparison between pointer and integer ('NSUInteger' (aka 'unsigned long') and 'void *')
有谁知道我如何确定我的锚点是否有价值?
NSUInteger
不是对象,不能与 nil 进行比较。用过于简单的术语来说,对象是指向可能包含值或 nil
的内存位置的指针。 NSUInteger
只是一个值。它可能是 0
,或者您不期望的其他一些值,但它会有一个值。
一个NSUInteger
不能为nil,因为它不是一个对象。创建时的默认值为零。要保存在 NSUserDefaults
中,您可以将其存储为 NSNumber
,稍后可以检查它是否为 nil。
存储在NSUserDefaults
:
NSNumber *aNumber = @(anchor);
[[NSUserDefaults standardUserDefaults] setObject:aNumber forKey:aKey];
要从 NSUserDefaults
取回锚点:
NSNumber *aNumber = [[NSUserDefaults standardUserDefaults] objectForKey:aKey];
if (aNumber != nil) {
NSUInteger anchor = [aNumber integerValue];
}
NSUInteger 是原始类型,不是对象类型。 NSNumber 是一种对象类型。对于 NSNumber 对象,您可以检查它是否为 nil。 NSUInteger 永远不会为 nil,因为它是整数,而不是指针。
许多函数 return NSUInteger 作为搜索的结果 return 如果搜索失败则常量 NSNotFound。 NSNotFound 被定义为一个非常大的整数(32 位为 2^31 - 1,64 位为 2^63 - 1)。
NSUInteger
或简称 int 基本上是原始数据类型,它们应该与相应数据类型范围内的整数值进行比较。 nil 与引用对象一起使用。
在你的例子中,锚点是 NSUInteger
所以你应该使用整数值来代替 nil as-
if(anchor != 0) {
// do stuff
}