Betrachten Sie die folgende Methode
- (void)methodWithArg:(NSString *)arg1 andArg:(NSString *)arg2 completionHandler:(void (^)(NSArray *results, NSError *error))completionHandler;
Mit den Schlüsselwörtern new nonnull
und nullable
annotation können wir sie wie folgt anreichern:
- (void)methodWithArg:(nonnull NSString *)arg1 andArg:(nullable NSString *)arg2 completionHandler:(void (^)(NSArray *results, NSError *error))completionHandler;
aber wir bekommen auch diese Warnung:
Dem Zeiger fehlt ein Nullfähigkeitstyp-Bezeichner (__nonnull oder __nullable).
Es bezieht sich auf den dritten Parameter (den Block 1).
Die Dokumentation enthält keine Beispiele für die Angabe der Nullbarkeit von Blockparametern. Es heißt wörtlich
Sie können die nicht unterstrichenen Formulare unmittelbar nach einer offenen Klammer nullbar und nicht null verwenden, sofern der Typ ein einfaches Objekt oder ein Blockzeiger ist.
Ich habe versucht, eines der beiden Schlüsselwörter für den Block (an einer beliebigen Position) ohne Glück zu platzieren. Habe auch die mit Unterstrich versehenen Varianten ( __nonnull
und __nullable
) ausprobiert .
Daher lautet meine Frage: Wie kann ich die Nullfähigkeitssemantik für Blockparameter angeben?
NSError **
Typ? Ich kann den Compiler nicht glücklich machen.