2016-10-03 5 views
0

In Swift 3 wird, wenn ein optionalen Funktionsparameter hat, was der Unterschied zwischen den Funktionen mit:Swift 3 -! vs? für optionale Funktionsparameter

func doThis(num: Int!) 

und

func doThat(num: Int?) 
+0

Kein Swift-Experte, aber nicht! auspacken optional und? ist optional? – Li357

+0

Sie sollten das gegooglet haben, bevor Sie dieses Zeug in diesem Forum veröffentlichen. Es ist keine sehr schwierige Frage. Optional bedeutet, dass Sie ein Nil aber mit erwarten können! Sie müssen etwas in seinem unwrapped Zustand übergeben, den es stürzt, wenn ein Null übergeben wird –

+0

Meine Frage betrifft die Funktionsdeklaration. – cdub

Antwort

5

Beide erklären, dass eine optionales numInt ist. Wenn Sie Int! tun, kann es implizit innerhalb Ihrer Funktion ausgepackt werden. Das bedeutet, dass Sie es an Orten verwenden können, an denen eine einfache (nicht optionale) Int erforderlich ist. In diesem Fall wird es fehlschlagen, wenn es nil ist.

Mit einem "richtigen" Int? wird der Compiler Sie nicht num verwenden, wo ein Int erforderlich ist und zwingt Sie, zuerst eine Prüfung/Wache einzuschließen.

Das Konstrukt Int! ist meistens für die Interoperabilität mit Objective-C-Code da, wo nicht klar ist, ob ein Referenztyp optional ist oder nicht. Sie sollten es in neuem Code vermeiden.

+0

Ja, das stimmt mit dem Verhalten überein, das ich beobachte. Vielen Dank. – cdub