id _Nullable __autoreleasing * _Nonnull是什么意思?



我对代码文档中(out id _Nullable *)的使用以及我的代码片段给我抛出的错误感到困惑。

#import <Foundation/Foundation.h>
void getvalue(char *a, bool *value){
@autoreleasepool {
NSURL *url = [[NSURL alloc] initFileURLWithFileSystemRepresentation:a 
isDirectory:NO 
relativeToURL:nil];
[url getResourceValue:value 
forKey:NSURLIsDirectoryKey 
error:nil];
}
}
void main (int argc, const char * argv[])
{
bool value[10];
char a[] = "a";
getvalue(a, value + 4);
}

无法使用类型为"bool *"的左值初始化类型为"id _Nullable __autoreleasing * _Nonnull"的参数

_Nullable * _Nonnull是什么意思,我在代码中做错了什么?

参考:

getResourceValue:forKey:error:

- (BOOL)getResourceValue:(out id  _Nullable *)value 
forKey:(NSURLResourceKey)key 
error:(out NSError * _Nullable *)error;

_Nullable * _Nonnull不是这里的问题。问题是,当您需要传递指向对象的指针时,您正在传递指向布尔值的指针。getResourceValue:forKey:error:返回对象,而不是基元。在本例中,使用 NSNumber。

NSNumber *result = nil;
[url getResourceValue:&result
forKey:NSURLIsDirectoryKey
error:nil];
*value = [result boolValue];

对于这个问题,id _Nullable * _Nonnull的意思是"指向对象指针,它不能为空。这是 ObjC 中的标准引用返回模式。id是指向对象的指针的 typedef。

最新更新