Closures

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Ich habe scheinbar ein Verständisproblem mit den Blöcken in copletionHandlern. Es geht um folgende Zeile: [alert beginSheetModalForWindow:[sender window] completionHandler:(void (^)(NSModalResponse returnCode))callBack]; . Den handler-Namen habe ich durch folgende Zeile erstellt: void (^callBack)(NSModalResponse returnCode); Das ganze funktioniert zwar einwandfrei (=Sheet wird ein und ausgeblendet) aber irgenwie wäre es interessant auch den gedrückten Button abzufragen und damit die entsprechende Methode aufzurufen. Ich habe versucht den vorher genannten Block durch Code zu erweitern, was jedoch in jedem Fall mit einer Fehlermeldung quittiert wird. Ich habe die Dokumentation konsultiert bin aber scheinbar zu blöd den richtigen Ansatz zu finden und bitte deshalb um Ratschläge wo ich die gesuchte Information finden kann oder welchen Fehler ich hier begehe.
    LG
  • Hallo,

    was meinst Du jetzt konkret?
    Die Synthax oder den Rückgabewert?

    Gib mal in Google "block variable" ein, dann kommst Du zum passenden Dokumentationseintrag.
    Ich weiß grad nicht, wie es konkret heißt.

    Zum einem verdeutlicht der Teil, wie Du Blöcke selbst zu einer Variable zuweist und wie Du mit Variablen in Blöcken umgehst.

    Zu Deinem konkreten Beispielt gibt es drei Konstanten, die First, Second und ThirdButton heißen.
    D.h. im Block prüfst Du einfach mit returnCode == NSFirstButton etc.
    Dann weißt Du für welchen Fall sich der Anwender entschieden hat.

    Viele Grüße
  • Das Problem für mich liegt darin, dass der Block in completionHandler void vorgibt, was meiner Meinung keinen Rückgabewert zulässt. Zweites Problem ich kann zwar den "handler" definieren aber keinen Codeblock erzeugen, weil die Struktur scheinbar das nicht zulässt. Die Fehlermeldung die beim Erzeugen eines Codeblocks erschein weist mich darauf hin, dass alle Teile auf void stehen .....(void)(^)(void. Die Dokumentation sagt, dass beim handler ein Block stehen soll, der bestimmt was nach schließen des Alerts passieren soll. Da der Code auf ein Closure hindeutet bin ich natürlich in diese Richtung gegangen, jedoch nur mit mäßigem Erfolg.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von b.brandl ()

  • Natürlich lässt der Completion-Handler keinen Rückgabewert zu. Was sollte er auch zurückgeben?

    Allerdings erhält er – wie von dir auch in deinem ersten Beitrag gesagt – den Button im Parameter returnCode. Daraufhin kannst du ja bestimmen, was im Block gemacht werden soll.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?