在Objective-C的最新版本中,您可以为指针添加可空性注释,以指定事情何时可以成为nil
。这使得语法合法:
-(void)doSomething:(nonnull NSString *)param;
这告诉编译器param
永远不应该是nil
。但是,传递它nil
并不是错误。因此,在我的API中,我正在测试以确保我的方法在传递nil
时能够理解,以防万一。但是,我注意到当传递nil
时,标记为nonnull
的参数会自动转换为其类型的空实例。例如,如果我像这样调用上面的例子:
[self doSomething:nil];
param
将是方法内的空字符串,而不是nil
,正如我所料。这是有记录的,预期的行为吗?如果是这样,有没有办法让它仍被视为nil
,那么我可以更有效地处理它?</ p>
答案 0 :(得分:1)
仍然不确定究竟发生了什么(特别是如果它在另一个系统上无法重现),但标准删除DerivedData和一个干净的构建似乎解决了这个问题,由于某种原因
答案 1 :(得分:1)
你可以打电话
[self doSomething:[NSNull null]];
如果你有
-(void)doSomething:(nonnull id)param;
否则你应该致电
[self doSomething:@""];