2016-07-20 6 views
2

Ich habe eine Frage nach Nutzung des inout in Swift 3.inout Erklärungen für Typ Dekoration

Wie ich inout verstehen für die Verwendung recht teuer Betrieb ist.

Und es gibt Frage, wann und warum es besser ist, inout Deklaration zu verwenden?

reguläre Funktion:

func double(input: Int) { 
    var input = input 
    input = input * 2 
} 

inout Erklärung Verwendung:

func double(input: inout Int) { 
    input = input * 2 
} 
+0

'Inout ist ziemlich teuer Operation für den Einsatz' Warum sagst du das? – Moritz

+0

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 –

+0

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

Antwort

1

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.