id _Nullable __autoreleasing * _Nonnull是什么意思?

问题描述 投票:0回答:1

我对代码文档中(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:

getResourceValue:forKey:error:
objective-c objective-c++ objective-c-nullability
1个回答
0
投票

- (BOOL)getResourceValue:(out id _Nullable *)value forKey:(NSURLResourceKey)key error:(out NSError * _Nullable *)error; 在这里不是问题。问题是当您需要将指针传递给对象的指针时,您将指针传递给bool。 _Nullable * _Nonnull返回一个对象,而不是原始对象。在这种情况下,请输入NSNumber。

getResourceValue:forKey:error:

对于这个问题, NSNumber *result = nil; [url getResourceValue:&result forKey:NSURLIsDirectoryKey error:nil]; *value = [result boolValue]; 的意思是“一个指向ID(指针)的指针,该指针不能为null。可以是null。”

© www.soinside.com 2019 - 2024. All rights reserved.