2017-09-04 8 views
0
var stream: DataStream? = nil 
switch stream { 
    case nil: 
print("No data stream is configured.") 
    case let x?: 
print("The data stream has \(x.availableBytes) bytes available.") 
} 

Refrenced durch switch optional code, der obigen Gehalt public func ~= <T>(lhs: _OptionalNilComparisonType, rhs: T?) -> Bool Funktion Anruf entsprechen. Und es gibt ein anderes Schaltmuster in dieser Funktion:Swift Schaltmuster mit .some/.none

Meine Frage ist whitch Funktion wird von diesem Muster aufgerufen werden? Es gibt zwei ~ = Überlastfunktionen in Range.swift & Policy.swift, wird einer von ihnen aufgerufen?

Antwort

1

Ihre Frage ist nicht ganz klar zu sein, aber ~= ist der Mustervergleichsoperator.

func ~=(pattern: ???, value: ???) -> Bool 

Durch das Überschreiben Sie können Ihre eigene Mustererkennung für die benutzerdefinierte Typen erstellen und sie in eine switch (im Grunde den Schalter Aufruf dieser Operator) verwenden.
Es ist ein guter Artikel hier https://appventure.me/2015/08/20/swift-pattern-matching-in-detail/ Was Sie in Range und Policy sehen sind einfach die individuelle Überlastung dieses Operators, um es mit Range und Policy Typen zu machen zu arbeiten, wie sie für optionals tat.

+0

Danke, ruft jedes Schaltermuster eine Überlastfunktion auf? Wenn ja, welche Funktion wird dieses Muster aufrufen? Schalter rhs { Fall .some (_): falsch Fall .none zurück: return true } – Maize

+0

Ich verstehe nicht jedes Schaltmuster rufen ~> Überlastfunktion – Maize

+0

Wenn einige Arten ruft die '>' oder '==' Ich denke, dass es von der Implementierung des '~ =' abhängt – Andrea