objective-c - parameter - objective c optional property
블록 기반 API 메소드에서 널이 아닌 널 입력 가능 Objective-C 키워드를 사용하는 방법 (4)
다음 방법을 고려하십시오
- (void)methodWithArg:(NSString *)arg1 andArg:(NSString *)arg2 completionHandler:(void (^)(NSArray *results, NSError *error))completionHandler;
nonnull
nullable
새로운
주석 키워드를
사용하여 다음과 같이 보강 할 수 있습니다.
- (void)methodWithArg:(nonnull NSString *)arg1 andArg:(nullable NSString *)arg2 completionHandler:(void (^)(NSArray *results, NSError *error))completionHandler;
그러나 우리는 또한이 경고를받습니다 :
포인터에 널 입력 가능 유형 지정자가 없습니다 (__null 또는 __nullable).
세 번째 매개 변수 (블록 1)를 나타냅니다.
이 설명서 에는 블록 매개 변수의 Null 허용 여부를 지정하는 방법에 대한 예제가 포함되어 있지 않습니다. 말 그대로
유형이 단순한 객체 또는 블록 포인터 인 경우, 괄호 바로 뒤에는 밑줄이없는 양식에서 널 입력 가능 및 널이 아닌 양식을 사용할 수 있습니다.
나는 블록에 대한 두 키워드 중 하나를 아무 위치 에나 놓아 두려고 시도했습니다.
밑줄 접두어 변형 (
__nonnull
및
__nullable
)도 시도했습니다.
따라서 내 질문은 : 블록 매개 변수에 null 허용 의미를 어떻게 지정할 수 있습니까?
다음과 같이 할 수도 있습니다 :
- (id __nullable)methodWithArg:(NSString * __nullable)arg1
andArg:(NSString * __nonnull)arg2
completionHandler:(void (^ __nonnull)(NSArray * __nonnull results, NSError * __nullable error))completionHandler;
더 좋아하는 구문에만 의존합니다.
다음은 NSError ** 사례에 사용한 것입니다.
-(BOOL) something:(int)number withError:(NSError *__autoreleasing __nullable * __nullable)error;
이것은 작동하는 것 같습니다
- (void)methodWithArg:(nonnull NSString *)arg1
andArg:(nullable NSString *)arg2 completionHandler:(nullable void (^)
(NSArray * _Nullable results, NSError * _Nonnull error))completionHandler
블록과 해당 매개 변수 모두에 대해 null 허용 여부를 지정해야합니다.
편집 : 자세한 내용은 Swift Blog를 참조하십시오.
헤더 파일에서 완성을 정의하기 위해이 작업을 수행했습니다.
typedef void (^PublicEventsHandler) (BOOL success, NSArray * _Nullable publicEvents);
물론, 나는 대답에 동의합니다.