2016-01-08 11 views
6

Was es die häufigste Situation, wo Sie wollen würden, eine Funktion aus einer Funktion in Swift zurück?Wenn eine Funktion aus einer anderen Funktion in Swift zurückzukehren

Im Code unten ich eine Funktion zurückkehrt, aber ich sehe nicht wirklich den Zweck, da die Funktion ich zurückkehren werde innerhalb der Funktion, die es zurückkehrt. Der Grund, warum ich verwirrt bin, ist, dass wir dasselbe mit nur einer Funktion erreichen könnten.

Kann jemand auf häufige Situationen hinweisen, in denen Sie eine Funktion zurückgeben und sie mit einem besseren Beispiel veranschaulichen möchten?

Ich möchte, dies zu verstehen, da dies für die Programmierung im Allgemeinen von grundlegender Bedeutung ist nicht nur Swift (glaube ich).

+2

Dies ist eine funktionale Programmierung Konzept, nicht unbedingt eine grundlegende für die Programmierung. Sie sollten über Functional Programming und das Curry-Konzept lesen. Siehe diesen Link zum Beispiel: https://en.wikipedia.org/wiki/Currying Einer der Vorteile ist, dass jede Funktion nur 1 Argument akzeptiert. –

+6

@LaurentRivard dass currying beachten Sie wird möglicherweise von einer schnellen entfernt werden: https://github.com/apple/swift-evolution/blob/master/proposals/0002-remove-currying.md – luk2302

+0

Werfen Sie einen Blick auf [meine Antwort hier] (http://stackoverflow.com/a/34566757/2442804) für ein Beispiel für eine Verwendung von Funktionen Schließungen als tatsächlich zurückgegebenen/verwendeten Objekt – luk2302

Antwort

6

Ein klassisches Beispiel in einem Rechnerprogramm sein würde, zum Beispiel:

func operatorForString(str: String) -> ((Float, Float) -> Float)? { 
    if str == "+" { 
     return (+) // brackets required to clarify that we mean the function 
    } else if str == "-" { 
     return (-) 
    } else if str == "*" { 
     return (*) 
    } else if str == "/" { 
     return (/) 
    } else if str == "**" { 
     return pow // No brackets required here 
    } else { 
     return nil 
    } 
} 

if let op = operatorForString("-") { 
    let result = op(1, 2) // -1 
} 

Es ist ziemlich gekünstelt, aber es zeigt das Prinzip einfach ...

Als „Übung für den Leser“ versuchen, tun Sie es als Dictionary Nachschlagen, anstatt wiederholt if s :)

Verwandte Themen