~ = - operator in Swift
Habe ich vor kurzem heruntergeladen Erweiterte NSOperations - Beispiel-app von Apple und fand diesen code...
//Operators to use in the switch statement.
private func ~=(lhs: (String, Int, String?), rhs: (String, Int, String?)) -> Bool {
return lhs.0 ~= rhs.0 && lhs.1 ~= rhs.1 && lhs.2 == rhs.2
}
private func ~=(lhs: (String, OperationErrorCode, String), rhs: (String, Int, String?)) -> Bool {
return lhs.0 ~= rhs.0 && lhs.1.rawValue ~= rhs.1 && lhs.2 == rhs.2
}
Scheint es zu verwenden, die ~=
Betreiber gegen Strings
und Ints
aber ich habe noch nie gesehen es vor.
Was ist es?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist ein operator, der verwendet wird für die Mustererkennung in einem
case
- Anweisung.Können Sie einen Blick hier, um zu wissen, wie Sie verwenden können, und nutzen es bietet eine eigene Implementierung:
Hier ist ein einfaches Beispiel für die Definition einer eigenen und die, die es verwenden:
for case let item in items {...}
etc.?case
- Anweisung. Ich habe meinen Beitrag aktualisiert.switch
über muss der 2. parameter der~=
überlastung. Bedeutungfunc ~=(value: Person, pattern: String) -> Bool{ return value.name == pattern }
würde dieser Fehler generieren: Ausdruck-Muster des Typs 'String' kann nicht übereinstimmen, die Werte vom Typ 'Person'~=
und ändern die Namen der parameter und nicht irgendwelche Probleme. Aber wenn ich vertauscht die position von dem Typen dann lief ich in ein Problem. Nicht sicher, ob dies korrekt ist, aber es scheint, dass es irgendwie ignoriert den parameter 'Namen' und bezieht sich nur auf, wie Sie mit Ihrer 'position' in der Funktion Signatur. Ich Frage mich, wie Swift zieht diese aus.~=
in beide Richtungen (d.h. die person, auf die Links, string rechts und Umgekehrt.) Tun, passen Sie in jede Ordnung und löst das problem erwähnt in dem Kommentar oben.case
Aussagenswitch p .... case "Alessandro"
schreiben Siefunc ~=(pattern: String, value: Person)
stattfunc ~=(value: Person, pattern: String)
. Die~=
muss das Muster als ersten param, nicht der Wert, und das ist die Quelle der Verwirrung für viele Benutzer. Wieder Lesen, was Honig geschrieben und du verstehst, was ich meine 😉 .solves the problem mentioned in the comment above
das ist nicht wahr. Oder besser, er löst das problem, indem alle möglichen Permutationen, so dass einer von Ihnen ist sicher die richtige version, auch wenn der andere möglicherweise nie benötigt werden.Verwenden Sie einfach eine Verknüpfung zu "Angebot": können Sie konstruieren eine Reihe und "~=" bedeutet "enthält".
(andere können hinzufügen, mehr theoretische details, aber der Sinn ist dieser). Lesen Sie es als "enthält"
versuchen mit einige Werte von n.
Ist weit verbreitet, zum Beispiel in HTTP-Antwort:
Können Sie Einblick in Definieren Swift
true
oderfalse
? Ich kann sehen, dass es ausgeführt werden kann, gegenEquatable
Variablen des gleichen Typs, aber das sagt mir nichts über die Umsetzung.