次の方法を検討してください
- (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;
ただし、次の警告も表示されます。
ポインターにヌル可能型指定子(__nonnullまたは__nullable)がありません
3番目のパラメーター(ブロック1)を参照します。
ドキュメントには、ブロックパラメータのNULL値の許容を指定する方法の例をカバーしていません。それは逐語的に述べています
型が単純なオブジェクトまたはブロックポインターである限り、左かっこの直後に、アンダースコアなしのフォームnull可能およびnullなしを使用できます。
ブロックの2つのキーワードの1つを(任意の位置に)運がなくても入れてみました。また、アンダースコア付きのバリアント(__nonnull
および__nullable
)も試しました。
したがって、私の質問は次のとおりです。どのようにして、ブロックパラメーターのnull可能性セマンティクスを指定できますか
NSError **
タイプでどのように機能しますか?コンパイラーを幸せにすることはできません。