Programmieren mit Swift - Für macOS und iOS
Programmieren mit Swift - Für macOS und iOS
Benannte Parameter von Methoden

Methoden gehören immer zu einer Klasse, Funktionen nicht. Man kann es nicht oft genug wiederholen. In Swift ist diese allgemeingültig Definition der objektorientierte Programmierung allerdings nicht der einzige Unterschied. Besondere Aufmerksamkeit verlangt die Syntax von Funktionen und Methoden, wenn es um die Benennung von Parametern geht. Eine Funktion in Swift ist noch sehr einfach:
// Definition einer Funktion
func addValues(valueA:Double, valueB:Double) -> Double
{
     return valueA + valueB
}

// Aufruf der Funktion
var funcResult = addValues(24.55, 75.23)
Überträgt man den Code in eine Klasse, wird aus der Funktion also eine Methode, funktioniert der Aufruf nicht mehr. Der Compiler ist mit dem Syntax der Anweisung nicht zufrieden.
class Calculator
{
     // Definition einer Methode in einer Klasse
     func addValues( valueA:Double, valueB:Double) -> Double
     {

          return
valueA + valueB
     }
}

// Klasseninstanz erzeugen
var calc = Calculator()

// Aufruf der Methode
var result = calc.addValues(24.55, 75.23) // Fehler !!
Der Grund für das Problem ist vielleicht nicht auf den ersten Blick zu erkennen, aber er wird schnell ersichtlich, wenn man den Methodenaufruf komplett neu eingibt. Die Code-Sense-Eingabehilfe der Entwicklungsumgebung wird aus dem zweiten Parameter automatisch einen benannten Parameter machen. Dann funktioniert der Aufruf.
// Aufruf der Methode mit valueB als benannten Parameter
var result = calc.addValues(24.55, valueB: 75.23)
In Swift müssen alle Parameter einer Methode, ab dem zweiten Parameter, benannte Parameter sein. Für Funktionen gilt diese Regelung nicht, dort dürfen sämtliche Parameter unbenannt sein.
Die Ursache für diesen Unterschied ist im Objective-C-Syntax zu finden, an der sich die Entwickler beim Entwurf von Swift orientiert haben. In dieser Sprache ist es üblich, dass der erste Parametername Teil des Methodennamens ist. Alle weiteren Parameter sind benannte Parameter.
Die Methode hiesse nicht:
func addValues(valueA:Double, valueB:Double) -> Double
sondern:
func addValueA(valueA:Double, withValueB valueB:Double) -> Double
Übersetzt »Addiere Wert A mit Wert B«, was die Aufgabe der Methode sogar ein wenig genauer beschreibt.
Sollen alle Parameter einer Methode ohne zusätzliche Benennung verwendet werden, muss man dies in der Methode explizit angeben. Wird statt einem Parameternamen ein Unterstrich verwendet, wird ein Parameter zu einem unbenannten Parameter. Für den ersten Parameter der Methode ist das nicht erforderlich.
class Calculator
{
     // Definition einer Methode mit unterdrückten
     // benannten Parametern

     func
addValueA( valueA:Double, _ valueB:Double) -> Double
     {

          return
valueA + valueB
     }
}

// Klasseninstanz erzeugen
var calc = Calculator()

// Aufruf einer Methoden ohne benannte Parameter
var result = calc.addValueA(24.55, 75.23)
Soll im Gegenzug eine Funktion ausschließlich mit benannten Parameter aufgerufen werden können, muss man die Parameter mit einem # kennzeichnen.
// Definition einer Funktion mit benannten Parametern
func addValues(#valueA:Double, #valueB:Double) -> Double
{
     return valueA + valueB
}

// Aufruf einer Funktion mit benannten Parametern
var funcResult = addValues(valueA: 24.55, valueB: 75.23)