2017-03-09 4 views
0

Wir vergleichen zwei optionale Variablen durchOptional`s gleichzusetzen in Swift

public func ==<T : Equatable>(lhs: T?, rhs: T?) -> Bool 

Aber wenn ich ein String? und String vergleichen zu können, geht es in die gleiche Funktion oben. Warum nicht:

public func ==<T : Equatable>(lhs: T?, rhs: T) -> Bool 

Antwort

-2

Im Allgemeinen ist eine Funktion mit den Argumenten einiger optionaler Typ (Type?) impliziert nicht die Notwendigkeit einer Variablen optional Typ als eine Eingabe. Mit anderen Worten, nehmen Sie sich etwas Funktion foo so dass

func foo(in: Type?) { ... } 

Was das wirklich bedeutet, ist, dass die Funktion sowohl nil und Type Variablen als Eingaben (bei ungeöffneten) akzeptiert. Logischerweise ist dies nil || Type, also kann natürlich eine Variable der Klasse Type? als Eingabe genommen werden, da sie identisch ist nil oder Type wenn sie ausgepackt ist. Aber auch Type (nicht optional) funktioniert auch gut, weil es eine der Bedingungen im logischen Ausdruck erfüllt.

+0

Es scheint, dass Sie Recht haben. –

+0

@ 季 亨达 Fühlen Sie sich frei zu upvote und markieren Sie die Antwort als richtig. Froh, dass ich Helfen kann. –

+1

Das ist sicherlich richtig - warum die Downvotes? –