id _Nullable __autoreleasing * _Nonnull 是什么意思?
What does id _Nullable __autoreleasing * _Nonnull mean?
我对代码文档中 (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);
}
Cannot initialize a parameter of type 'id _Nullable __autoreleasing * _Nonnull' with an lvalue of type 'bool *'
_Nullable * _Nonnull
是什么意思,我在代码中做错了什么?
参考:
getResourceValue:forKey:error:
- (BOOL)getResourceValue:(out id _Nullable *)value
forKey:(NSURLResourceKey)key
error:(out NSError * _Nullable *)error;
_Nullable * _Nonnull
不是这里的问题。问题是当您需要将指针传递给指向对象的指针时,您传递的是指向布尔值的指针。 getResourceValue:forKey:error:
return 是一个对象,而不是原始对象。在这种情况下,NSNumber.
NSNumber *result = nil;
[url getResourceValue:&result
forKey:NSURLIsDirectoryKey
error:nil];
*value = [result boolValue];
对于这个问题,id _Nullable * _Nonnull
意味着 "a pointer, which must not be null, to an object-pointer, which may be null." 这是 ObjC 中的标准 return-by-reference 模式。 id
是指向对象的指针的类型定义。
我对代码文档中 (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);
}
Cannot initialize a parameter of type 'id _Nullable __autoreleasing * _Nonnull' with an lvalue of type 'bool *'
_Nullable * _Nonnull
是什么意思,我在代码中做错了什么?
参考:
getResourceValue:forKey:error:
- (BOOL)getResourceValue:(out id _Nullable *)value
forKey:(NSURLResourceKey)key
error:(out NSError * _Nullable *)error;
_Nullable * _Nonnull
不是这里的问题。问题是当您需要将指针传递给指向对象的指针时,您传递的是指向布尔值的指针。 getResourceValue:forKey:error:
return 是一个对象,而不是原始对象。在这种情况下,NSNumber.
NSNumber *result = nil;
[url getResourceValue:&result
forKey:NSURLIsDirectoryKey
error:nil];
*value = [result boolValue];
对于这个问题,id _Nullable * _Nonnull
意味着 "a pointer, which must not be null, to an object-pointer, which may be null." 这是 ObjC 中的标准 return-by-reference 模式。 id
是指向对象的指针的类型定义。