如何检查结构是否已初始化?

nev*_*ing 4 struct objective-c

我正在使用NSRange(一个结构)并像这样初始化它:

@interface MyViewController : UIViewController
{
    NSRange currentRange;
}
Run Code Online (Sandbox Code Playgroud)

NSRange有一个位置和长度字段.

如何检查结构是否已使用值初始化?我试过了:

if (myRange.length == nil)
Run Code Online (Sandbox Code Playgroud)

但是编译器抱怨将指针与整数进行比较.谢谢.

小智 9

nil是一个指针,但是length是一个整数,因此编译器警告.你可以比较length0,但随后这对在长度的合法值NSRange.如果我需要一个"尚未初始化"的值currentRange,我会选择将其设置为:

{ .location = NSNotFound, .length = 0 }
Run Code Online (Sandbox Code Playgroud)

-init.当然,这假设范围在操作过程中永远不会假设该值.如果范围可以真正采用其域中的任何值,则您不能将它们中的任何一个用作"尚未初始化"的占位符.

您可以选择存储指向范围的指针,该范围为NULL,直到设置范围为止.另一种选择是使用状态模式来区分范围设置之前和之后的状态.另一个是设计类及其接口契约,使得范围仅在设置后才被使用.