将nil传递给nonnull方法参数

时间:2016-03-28 05:08:26

标签: ios objective-c macos

在Objective-C的最新版本中,您可以为指针添加可空性注释,以指定事情何时可以成为nil。这使得语法合法:

-(void)doSomething:(nonnull NSString *)param;

这告诉编译器param永远不应该是nil。但是,传递它nil并不是错误。因此,在我的API中,我正在测试以确保我的方法在传递nil时能够理解,以防万一。但是,我注意到当传递nil时,标记为nonnull的参数会自动转换为其类型的空实例。例如,如果我像这样调用上面的例子:

[self doSomething:nil];

param将是方法内的空字符串,而不是nil,正如我所料。这是有记录的,预期的行为吗?如果是这样,有没有办法让它仍被视为nil,那么我可以更有效地处理它?<​​/ p>

2 个答案:

答案 0 :(得分:1)

仍然不确定究竟发生了什么(特别是如果它在另一个系统上无法重现),但标准删除DerivedData和一个干净的构建似乎解决了这个问题,由于某种原因

答案 1 :(得分:1)

你可以打电话

[self doSomething:[NSNull null]];

如果你有

-(void)doSomething:(nonnull id)param;

否则你应该致电

[self doSomething:@""];
相关问题