Verwendung von Objective-C-Schlüsselwörtern mit und ohne Nullwert in der blockbasierten API-Methode
Betrachten Sie die folgende Methode
- (void)methodWithArg:(NSString *)arg1 andArg:(NSString *)arg2 completionHandler:(void (^)(NSArray *results, NSError *error))completionHandler;
Mit der neuen nonnull
und nullable
Anmerkung keywords wir bereichern können es wie folgt:
- (void)methodWithArg:(nonnull NSString *)arg1 andArg:(nullable NSString *)arg2 completionHandler:(void (^)(NSArray *results, NSError *error))completionHandler;
aber wir bekommen auch diese Warnung:
Zeiger fehlt, ist ein null-Zulässigkeit Typ Bezeichner (__- null-oder
__nullable)
Er bezieht sich auf den Dritten parameter (der block).
Den Dokumentation nicht gerade mit Beispielen, wie Sie angeben, die null-Zulässigkeit der block-Parameter. Darin heißt es wörtlich
Können Sie die nicht-Unterstrichen Formen nullable-und nicht-null-sofort
nach einer öffnenden Klammer, solange der Typ ist ein einfaches Objekt, oder
block-pointer.
Habe ich versucht, indem eines der beiden Schlüsselwörter für den block (in jeder position), ohne Glück. Habe auch versucht den Unterstrich als Präfix-Varianten (__nonnull
und __nullable
).
Daher meine Frage: wie kann ich angeben, die null-Zulässigkeit für semantische block Parameter?
InformationsquelleAutor der Frage albertodebortoli | 2015-04-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese scheint zu funktionieren
Müssen Sie angeben, null-Zulässigkeit, sowohl für die block und seine Parameter...
BEARBEITEN: weitere Informationen finden Sie unter Swift Blog
InformationsquelleAutor der Antwort Fabio Ritrovato
Laut Apple-Blog ("null-Zulässigkeit und Objective-C")
Sie können
NS_ASSUME_NONNULL_BEGIN
undNS_ASSUME_NONNULL_END
.Innerhalb dieser Regionen, die eine simple pointer-Typ wird davon ausgegangen, dass
nonnull
. Dann kann man nur noch hinzufügennullable
für nullable-Objekt, das wieNSError **
geben, sollteNSError * _Nullable * _Nullable
id *
geben, eine bessere Nutzungid _Nullable * _Nonnull
es hängt davon ab (möglicherweise werden Sie wollen eine_Nullable id * _Nullable
- Typ).NSObject *
geben, die Sie brauchen, setzen annotation nach Zeiger, wie dieseNSObject * _Nullable * _Nonnull
Hinweis
_Nonnull
und_Nullable
sollte verwendet werden, nachdem Zeiger oderid
(Apple hat in der Beispiel-codeAAPLListItem * _Nullable
), aber nicht Unterstrichen Formennonnull
undnullable
können nach einer offenen Klammer.überprüfen, mehr in "Null-Zulässigkeit und Objective-C"
Den
_Nullable id * _Nonnull
verwechselt werden können,id _Nullable * _Nonnull
ist besser zu verstehen._Nonnull
und_Nullable
sollte verwendet werden, nachdem Zeiger oderid
(Apple hat in der Beispiel-codeAAPLListItem * _Nullable
)InformationsquelleAutor der Antwort likid1412
Können Sie auch tun mögen dieses:
Es hängt nur die syntax, die Sie gerne mehr.
InformationsquelleAutor der Antwort OlDor
Definieren Abschlüsse, die in einer header-Datei ich habe diese
Natürlich, ich Stimme mit der Antwort akzeptiert.
InformationsquelleAutor der Antwort Krishna Kumar
Vom apple Entwickler-blog: Kern: _Nullable und _Nonnull
InformationsquelleAutor der Antwort Parag Bafna
Hier ist was ich benutzt habe, die NSError ** Fall:
InformationsquelleAutor der Antwort Kevin