2017-09-04 4 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 par switch optional code, le contenu ci-dessus appelleront public func ~= <T>(lhs: _OptionalNilComparisonType, rhs: T?) -> Bool fonction. Et il y a un autre modèle de commutation dans cette fonction:motifs de commutateur correspondant à Swift .Certaines/.NONE

public func ~= <T>(lhs: _OptionalNilComparisonType, rhs: T?) -> Bool { 
    switch rhs { 
    case .some(_): 
    return false 
    case .none: 
    return true 
    } 
} 

Ma question est la fonction whitch sera appelée par ce modèle? Il existe deux fonctions de surcharge ~ = dans Range.swift & Policy.swift, l'un d'entre eux sera appelé?

Répondre

1

Votre question n'est pas totalement claire, mais ~= est l'opérateur de correspondance de motif.

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

En redéfinissant il vous êtes en mesure de créer votre propre correspondance de motif pour vos types personnalisés et de l'utiliser dans un switch (essentiellement l'appel du commutateur ce opérateur).
Il y a un bon article ici https://appventure.me/2015/08/20/swift-pattern-matching-in-detail/ Que voyez dans Range et Policy vous sont tout simplement la surcharge personnalisée de cet opérateur pour le faire fonctionner avec Range et Policy types comme ils le faisaient pour optionals.

+0

Merci, est-ce que chaque modèle de commutateur appellera une fonction de surcharge? Si oui, quelle fonction ce modèle va-t-il appeler? rhs commutateur { cas de .Certaines (_): return false cas .NONE: return true } – Maize

+0

Je comprends, pas chaque modèle de commutateur appelleront ~> fonction de surcharge – Maize

+0

Si certains types appelle la '>' ou '==' Je suppose que ça dépendra de l'implémentation du '~ =' – Andrea