Aprende a usar el operador filter en Combine
Aprende a usar el operador filter en Combine

Operador Combine: filter

filter es un operador en Combine que nos permite filtrar valores que viajan a través de nuestro Publisher. Dentro del operador filter podemos añadir la condición que queramos usar para filtrar los valores de nuestro Publisher.

SwiftBeta

Tabla de contenido


👇 SÍGUEME PARA APRENDER SWIFTUI, SWIFT, XCODE, etc 👇
Aprende a usar el operador Filter en Combine
Aprende a usar el operador Filter en Combine

Hoy en SwiftBeta vamos a aprender a usar filter, otro de los operadores del framework Combine. Este operador nos permite filtrar información en nuestro Stream, en nuestra pipeline, de esta manera permitimos que solo algunos de los valores que publicamos en nuestro Publisher lleguen al suscriber. Es un operador muy útil para descartar información que no queremos recibir en el subscriber. Tal y como dice su nombre, filtramos aquellos valores que queremos que viajen a través de nuestro Publisher.

Operador filter en Combine

Vamos a continuar con nuestro Playground, cada vez que empezamos un nuevo video sobre Combine representar una Page nueva en nuestro Playground. En este caso, vamos a crear una Page nueva llamada filter.

En el ejemplo práctico de hoy vamos a publicar valores String en nuestro Publisher y vamos a usar el operador filter para filtrar todos aquellos valores que tengan más de 6 caracteres (solo vamos a dejar pasar los que cumplan esta condición string.count > 6).

Para empezar, creamos nuestro Publisher PassthroughSubject de tipo String y no permitimos que se puedan enviar errores.

let stringPublisher = PassthroughSubject<String, Never>()
Creamos nuestro Publisher

Ahora, nos vamos a suscribir y vamos a publicar algunos valores. Fíjate que aún no vamos a usar el operador filter.

stringPublisher.sink { completion in
    print("Completion: \(completion)")
} receiveValue: { value in
    print("Value: \(value)")
}

stringPublisher.send("Swift")
stringPublisher.send("SwiftBeta")
stringPublisher.send("UIKit")
stringPublisher.send("Combine")
Nos suscribimos al Publisher y recibimos valores en nuestro Subscriber

Si ahora compilamos nuestro Playground, obtenemos por consola el siguiente resultado:

Value: Swift
Value: SwiftBeta
Value: UIKit
Value: Combine
Valores recibidos en nuestro Subscriber

Ahora vamos a aplicar el operador filter, y vamos a usar la condición de filtrar todos los valores que tengan más de 6 caracteres:

stringPublisher
    .filter { value in value.count > 6}
    .sink { completion in
    print("Completion: \(completion)")
} receiveValue: { value in
    print("Value: \(value)")
}

stringPublisher.send("Swift")
stringPublisher.send("SwiftBeta")
stringPublisher.send("UIKit")
stringPublisher.send("Combine")
Filtramos los valores que viajan en nuestro Publisher. La condición de filtrado es que solo los que sean >6 llegaran al Subscriber

Al hacerlo, obtenemos el siguiente resultado por consola:

Value: SwiftBeta
Value: Combine
Valores que llegan al Subscriber

Solo se han filtrado los valores que hemos publicado en el Publisher con un número de caracteres mayor a 6. Por lo tanto, estos valores son los que ha podido recibir el suscriber.

Conclusión

Hoy hemos aprendido a usar otro operador de Combine llamado filter. Este operador es muy útil para filtrar valores que viajan a través de nuestro Publisher.