Was macht ein kaufmännisches und-Zeichen (&) bedeuten, in die Swift-Sprache?
Ich weiß, über das kaufmännische und-Zeichen als eine bit-operation, aber manchmal sehe ich es vor Variablennamen. Was bedeutet die Schaffung einer &
vor der Variablen?
- Der Check-In-Out-Parameter in der Swift-Funktionen-Dokumentation
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es funktioniert wie ein
inout
um die variable in einer in-out-parameter. In-out bedeutet in der Tat Wert übergeben nach Verweis, nicht nach Wert. Und es erfordert, nicht nur zu akzeptieren, Wert durch Referenz, durch weitergeben von Referenz, so geben es mit & -foo(&myVar)
statt nurfoo(myVar)
Wie Sie sehen, können Sie es verwenden, in der die Fehlerbehandlung von Swift, wo Sie haben, um einen Fehler verweisen, und übergeben Sie an die Funktion mit
&
die Funktion füllen die Fehler-Wert, falls ein Fehler auftreten, oder übergeben Sie die variable zurück, wie es war, bevorWarum nutzen wir es? Manchmal ist eine Funktion auch schon andere Werte zurückgibt und einfach wieder ein anderes (wie ein Fehler) verwirrend wäre, so geben wir diese als inout. Andere Zeiten, die wir wollen, dass die Werte werden aufgefüllt, indem die Funktion so, dass wir nicht haben, Durchlaufen Sie viele Werte zurückgeben, da die Funktion schon hat es für uns - neben anderen möglichen Verwendungszwecken.
Ich hoffe, dass hilft dir!
return sum & 0xff
&
ist eine bitweise UND-operatorEs bedeutet, dass es eine in-out-Variablen. Sie können etwas tun, direkt mit dieser Variablen. Es ist vergangen-Adresse, nicht als Kopie.
Beispiel:
10
?Wenn Sie
&
bevor eine variable in einer Funktion, das bedeutet, dass diese variable ist inout variable.@Icaro bereits beschrieben, was es bedeutet, ich werde nur ein Beispiel geben um zu veranschaulichen den Unterschied zwischen inout-Variablen und Variablen:
Wie bereits in anderen Antworten, verwenden Sie das Präfix
&
um eine wertübergabe an eineinout
parameter einer Methode oder Funktion aufrufen, wie beschrieben, unter Funktionen > Function Argument Labels und die Namen der Parameter > In-Out-Parameter in Die Swift-Programmiersprache. Aber es ist mehr als das.Können Sie in der Praxis, denken Sie Swift
inout
Parameter und übergeben von Werten an als ähnlich zu C-oder C++ - pass-by-Anschrift und pass-by-reference. In der Tat, der compiler optimieren wird, viele Verwendungen voninout
Parameter bis auf etwa die gleiche mechanik (vor allem, wenn Sie anrufen importierte C-oder ObjC-APIs, die sich in den Zeigern). Aber das sind nur Optimierungen, auf semantischer Ebeneinout
wirklich nicht passieren-Adressen um, das gibt der compiler, um diese Sprache zu konstruieren, flexibler und leistungsfähiger.Zum Beispiel, hier ist ein struct verwendet, die eine gemeinsame Strategie für die überprüfung von Zugriff auf eine seiner Eigenschaften:
(In "richtigen" code, der getter-und setter für
x
konnte Dinge tun, wie die Durchsetzung von Mindest - /maximal-Werte. Oderx
tun konnte anderen berechneten Eigenschaft tricks, wie sprechen in einer SQL-Datenbank unter der Haube. Hier wir nur das instrument des call-und get - /set-der zugrunde liegende Privateigentum.)Nun, was passiert, wenn wir an
x
zu eineminout
parameter?So, obwohl
x
ist eine berechnete Eigenschaft, übergabe "by reference" mit eineminout
parameter funktioniert wie Sie es erwarten, wennx
waren eine gespeicherte Eigenschaft oder eine lokale variable.Dies bedeutet, dass Sie passieren alle möglichen Dinge, die "by reference", die Sie konnte nicht einmal prüfen, die in C/C++/ObjC. Betrachten Sie beispielsweise die standard-Bibliothek
swap
Funktion, die zwei... "Dinge" und schaltet Ihre Werte:Den Weg
inout
funktioniert, können Sie auch lustige Sachen wie mit der+=
operator für geschachtelte Aufruf-Ketten:... das ist eine ganze Menge einfacher als das zerlegen einer
CGRect
einfach zu konstruieren eine neue mit einem anderenx
koordinieren.Diese differenziertere version der
inout
Verhalten, genannt "call-by-value-result", und der Möglichkeiten, Sie können optimieren Sie nach unten zu " C-Stil "pass by address" Verhalten, ist unter Erklärungen > Funktionen > In-Out-Parameter in Die Swift-Programmiersprache.inout
ist, es macht mich wollen, den Kopf nach unten die Straße für ein double-double und einen Milchshake.