2016-06-23 5 views
1

In meinem iPhone - Ziel c Projekt, das ich mehrere Werte von einer MethodeIst Blocks ist convinient Weg für mehrere Rückgabewerte in Ziel c

ich daran gedacht, mit Blocks zurückkehren zu tun haben, so

wie

- (void)fetchValueForKey:(nonnull NSString*)key WithCompletionHandler:(void(^_Nonnull)(id _Nullable value, NSError* _Nullable error))completionHandler 
    { 
    } 

ich diese Frage bin frage, weil in der Regel diese Art von Block params für Asynchron-Rückrufe verwendet werden, ist dies immer noch in Ordnung Blöcke zu verwenden, um mehrere Rückgabewerte zu bekommen? Bitte werfen Sie etwas Licht, danke im Voraus

+0

Warum verwenden Sie Array –

+1

nicht unbedingt für asynchrone Aufrufe. – Joshua

Antwort

1

Verbergen Sie nicht Ihre Absicht!

Wenn etwas als Completion-Handler bezeichnet wird, nimmt jeder, der den Code betrachtet (selbst der Autor des Codes eine Woche später), einen (asynchronen) Rückruf an.

In dem gegebenen Beispiel, ich denke, das geeignet sein könnte:

-(id)fetchValueForKey:(NSString*)key error:(NSError **)error { ... } 

und wäre inline mit vielen Frameworks wir (fügen Sie die Nicht-Null-Dekorateure, wie Sie sehen, passen) verwenden.

In anderen Fällen könnten Sie sie in ein Wörterbuch mit sinnvollen Schlüsseln packen, d. H. @{@"name" : ..., @"adress" : ...}. Dies ist viel besser, als ein Array von verschiedenen Dingen zurückzugeben, denen semantische Informationen vollständig fehlen.

Wenn Sie einen typsicheren und sehr sauberen Weg wünschen, verwenden Sie eine dedizierte Klasse mit diesen Eigenschaften. Oft sieht es so aus, als wäre es zu viel Spaß, später zu lesen, und oft zeigt sich, dass das Design erheblich verbessert werden kann und dass die Klasse in Ihrer Code-Basis ein guter Bürger wird.