0

(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;
4

1 回答 1

3

_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。

于 2020-02-10T04:42:20.207 回答