Casting null in Block

8

Ich habe heute nur schnell mit Blöcken gespielt und bin auf den Fehler gestoßen:

%Vor% %Vor%

Da ich wirklich nil zurückgeben wollte, wenn "1" oder "2" nicht eingegeben wurde, entschied ich mich dafür, die finale Rückgabe einfach an einen NSString zurückzugeben:

%Vor%

Das funktioniert ganz gut, ich war nur neugierig, ob das die richtige Lösung oder sogar schlechte Übung war, da ich nie daran gedacht habe, vorher Nil zu werfen?

    
fuzzygoat 10.01.2013, 13:23
quelle

1 Antwort

14

Es ist nicht der beste Ansatz.

Sie sollten die erste Zeile korrigieren:

%Vor%

Auf diese Weise hat das Blockliteral den Rückgabetyp angegeben und der Fehler verschwindet. Richtig.

BEARBEITEN: Erklärung zum Anfangsfehler hinzufügen:

Für einen Block ohne Rückgabetyp wird der Rückgabetyp vom Compiler abgeleitet (was bei Funktionen nicht der Fall ist). Wenn Sie in dem Block zwei return-Anweisungen mit unterschiedlichen Typen haben (beachten Sie, dass nil void * ist), kann der Compiler den Rückgabetyp nicht ableiten und meldet einen Fehler. Um diesen Fehler zu beheben, müssen Sie einen Rückgabetyp manuell angeben, um Mehrdeutigkeiten für den Compiler zu vermeiden.

Als eine gute Übung sollten Sie nie verschiedene Typen aus demselben Block zurückgeben, es sei denn, Sie verwenden Polymorphismus.

    
sqreept 10.01.2013, 13:29
quelle