Wenn ich firstThing
den Standardwert nil
einstelle, funktioniert dies, ohne den Standardwert von. nil
Ich erhalte die Fehlermeldung, dass beim Aufrufen der Funktion ein Parameter fehlt.
Durch die Eingabe Int?
dachte ich, es wäre optional mit einem Standardwert von nil
, habe ich Recht? Und wenn ja, warum funktioniert es nicht ohne das = nil
?
func test(firstThing: Int? = nil) {
if firstThing != nil {
print(firstThing!)
}
print("done")
}
test()
func test(firstThing: Int = 4)
: einen Nicht-Optional
Parameter mit einem Standardwert. DerOptional
Typ (zu dem?
ein Typname erweitert wird) ist ein Werttyp. "optionaler Parameter" ist ein unglücklicher Name für einen Parameter, der bei einem Funktionsaufruf unabhängig von seinem Typ vorhanden sein kann oder nicht.Antworten:
Optionale und Standardparameter sind zwei verschiedene Dinge.
Ein Optional ist eine Variable, die sein kann
nil
, das ist es.Standardparameter verwenden einen Standardwert , wenn Sie diesen Parameter weglassen. Dieser Standardwert wird wie folgt angegeben:
func test(param: Int = 0)
Wenn Sie einen optionalen Parameter angeben, müssen Sie ihn angeben, auch wenn der zu übergebende Wert lautet
nil
. Wenn Ihre Funktion so aussiehtfunc test(param: Int?)
, können Sie sie nicht so aufrufentest()
. Obwohl der Parameter optional ist, hat er keinen Standardwert.Sie können die beiden auch kombinieren und einen Parameter verwenden, der optional
nil
ist, wobei der Standardwert wie folgt lautet :func test(param: Int? = nil)
.quelle
Mit dem Standardargument können Sie die Funktion aufrufen, ohne ein Argument zu übergeben. Wenn Sie das Argument nicht übergeben, wird das Standardargument angegeben. Verwenden Sie also Ihren Code, um ...
... ist genau das gleiche wie das:
Wenn Sie das Standardargument wie folgt weglassen ...
... dann kannst du das nicht mehr machen ...
Wenn Sie dies tun, erhalten Sie den von Ihnen beschriebenen Fehler "fehlendes Argument". Sie müssen jedes Mal ein Argument übergeben, auch wenn dieses Argument nur
nil
:quelle
Swift ist nicht wie Sprachen wie JavaScript, in denen Sie eine Funktion aufrufen können, ohne die Parameter zu übergeben, und sie wird weiterhin aufgerufen. Um eine Funktion in Swift aufzurufen, benötigen Sie einen Wert seine Parameter zuzuweisen.
Mit Standardwerten für Parameter können Sie einen Wert zuweisen, ohne ihn beim Aufrufen der Funktion anzugeben. Deshalb
test()
funktioniert, wenn Sie in der Testdeklaration einen Standardwert angeben.Wenn Sie diesen Standardwert nicht angeben, müssen Sie den Wert für den Aufruf angeben:
test(nil)
.Außerdem und nicht direkt mit dieser Frage verbunden, aber wahrscheinlich erwähnenswert, verwenden Sie die "C ++" - Methode, um mit möglicherweise Nullzeigern umzugehen, um mit möglichen Nulloptionen in Swift umzugehen. Der folgende Code ist sicherer (insbesondere in Multithreading-Software) und ermöglicht es Ihnen, das erzwungene Auspacken des optionalen Codes zu vermeiden:
quelle
Sie stehen im Konflikt
Optional
mit einer Standardeinstellung. AnOptional
akzeptiert entweder einen Wert oder Null. Mit einem Standardwert kann das Argument beim Aufrufen der Funktion weggelassen werden. Ein Argument kann einen Standardwert mit oder ohneOptional
Typ haben.Beispielaufrufe mit Ausgabe:
Zusammenfassen:
Optional
Null oder kann eine Instanz vom Typ enthaltenOptional
und die Standardeinstellung hat, kann es im Funktionsaufruf weggelassen werden ODER es kann enthalten sein und mit einem Nullwert versehen werden (z. B. param1: nil).quelle
func getFilterNames(name: inout String){ }
, dass Sie den Namen ändern können, der übergeben wurde."Optionaler Parameter" bedeutet "Typ dieses Parameters ist optional". Dies bedeutet nicht "Dieser Parameter ist optional und kann daher beim Aufrufen der Funktion ignoriert werden".
Der Begriff "optionaler Parameter" scheint verwirrend zu sein. Zur Verdeutlichung ist es genauer, "optionaler Typparameter" anstelle von "optionalem Parameter" zu sagen, da das Wort "optional" hier nur den Typ des Parameterwerts und nichts anderes beschreiben soll.
quelle
Wenn Sie einen Bool-Parameter verwenden müssen, müssen Sie nur den Standardwert zuweisen.
dann können Sie ohne oder mit dem Parameter verwenden:
quelle
Wenn Sie den
func
mit oder ohne Parameter aufrufen möchten, können Sie eine Sekundefunc
mit demselben Namen erstellen, die den anderen aufruft.Jetzt können Sie eine Funktion mit
test
oder ohne Parameter aufrufen .quelle
Es ist wenig schwierig, wenn Sie versuchen, optionale Parameter und Standardwerte für diesen Parameter zu kombinieren. So was,
Diese beiden sind völlig gegensätzliche Vorstellungen. Wenn Sie einen optionalen Typparameter haben, diesen aber auch als Standardwert angeben, ist dieser jetzt kein optionaler Typ mehr, da er einen Standardwert hat. Selbst wenn der Standardwert Null ist, entfernt swift einfach die optionale Bindung, ohne den Standardwert zu überprüfen.
Es ist also immer besser, nil nicht als Standardwert zu verwenden.
quelle
nil
) hat.var foo: String; print(foo)
). Ein Funktionsargument mit einem Standardwert ist jedoch ein optionales Argument (Sie müssen es nicht im Funktionsaufruf übergeben) und kann auch vom optionalen Typ sein (dernil
auch als Standardwert zugewiesen werden kann).Standardwert bedeutet nicht Standardwert des Datentyps. Hier ist der Standardwert, der zum Zeitpunkt der Definition der Funktion definiert wurde. Wir müssen den Standardwert der Variablen deklarieren, während wir die Variable in der Funktion definieren.
quelle