Swift Funktionsaufruf - Übergabe soll einen Funktionsaufruf (Pointer) enthalten

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

  • Michael schrieb:

    Also, mir ist nicht klar, welches Konstrukt du ersetzen/verkürzen willst.

    OSXDev schrieb:

    Quellcode

    1. import Cocoa
    2. func rechne(parameter1: Int, parameter2: ((Int)->Int)? = nil) -> Int
    3. {
    4. return parameter2?(parameter1) ?? parameter1
    5. }
    Diese Funktion ist doch sinnlos. Wenn du keine Funktion als zweiten Parameter übergibst, braucht man die Funktion gar nicht erst aufrufen, sondern arbeitet direkt mit parameter1 weiter. Übergibst du eine Funktion, kannst du die auch gleich direkt aufrufen.

    OSXDev schrieb:

    Quellcode

    1. // Der nachfolgende Aufruf wird mit folgender Fehlermeldung quitiert: "Cannot convert value of type 'Int' to expected argument type '((Int) -> Int)?'"
    2. rechne(parameter1: 30, parameter2: rechneNochmal(parameter3: 20))
    Hier übergibst du als parameter2 ja keine Funktion, sondern das Ergebnis eines Funktonsaufrufs.
    @Michael: Zu Deiner ersten Feststellung bzgl. der Parameterverarbeitung. Dies stimmt und ist auch so gewollt. Es gibt mir die Möglichkeit eine bestehende Funktion um einen optionalen Parameter zu erweitern, d.h. bestehende Aufrufe dieser Funktion müssen nicht im ganzen Code angepasst werden. Des Weiteren kann ich eine dynamisch erstelle Funktion, welche zur Laufzeit erzeugt wird, optional übergeben und diese Verarbeitung ablaufen lassen. Diese läuft dann asynchron zur aufrufenden Funktion ab. Die Ergebnisse lösen weitere Aktionen aus, die wiederum Einfluss auf den Hauptprozess nehmen. Ich hoffe, ich habe es einigermaßen verständlich rübergebracht. :D Ist halt kein Buchhaltungsprozess. :) Gegen einen direkten Aufruf spricht, dass ich die Ergebnisse, welche ich aus dem übergebenen parameter1 erhalte, ebenfalls benötige. Hmmm, merke gerade, dass ich viel mehr schreiben müsste um den ganzen Ablauf hier verständlich zu erläutern. Naja, ich hoffe man kann die Komplexität einigermaßen erahnen. Es hat schon alles so seine Richtigkeit. :thumbsup:

    Was Deine Feststellung hinsichtlich parameter2 angeht, das war mir zu diesem Zeitpunkt nicht ganz klar. Da ein benannter parameterisierter Funktionsaufruf die Form: Funktionsname(parameter: Wert) aufweist, ging ich von der Annahme aus, dass dies auch als vollständiger Ausdruck so übergeben wird. Man lernt halt nicht aus. :)

    Danke für Deine Erklärung.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von OSXDev ()