Vorsicht, das ist eine klassische Falle! :)
Ihre zwei Funktionen machen nicht dasselbe, also ist man nicht "besser" als das andere.
Ihre erste:
func double(input: Int) {
var input = input
input = input * 2
}
tut nichts.
Denn mit var input = input
Sie machen eine Kopie des Eingangswertes, also wenn Sie input = input * 2
tun Sie nur die lokale Kopie ändern, und da Sie es nicht zurück, wird sie verworfen und diese Funktion hat keine Auswirkung schlussendlich.
Ihre zweite:
func double(input: inout Int) {
input = input * 2
}
etwas tut: den ursprünglichen Wert ändert, weil inout
ist ein Weg, um einen Wert, der durch Verweis übergeben. Keine Notwendigkeit, eine Kopie zu erstellen und zurückzugeben: die Variable selbst, die Sie an die Funktion übergeben, wird geändert.
Anmerkung: Ich schlage vor, Sie Martin R ausgezeichneten Link lesen, wo inout
sehr gut erklärt: https://stackoverflow.com/a/34486250/1187415.
'Inout ist ziemlich teuer Operation für den Einsatz' Warum sagst du das? – Moritz
Ich bearbeite meine Antwort. Die Quelle des teuren ist unter diesem Link https://realm.io/news/appbuilders-daniel-steinberg-whats-new-swift-3/. Abschnitt 0035 –
Und jetzt, dass Sie bearbeitet haben: Ihr erstes Beispiel * tut nichts *. 'Eingabe' ist eine * Kopie *. Wenn Sie das Original ändern möchten, verwenden Sie das zweite Beispiel mit inout. Das ist nicht das Gleiche! – Moritz