Muy buenas, soy Miguel y en esta ocasión les traigo un nuevo tutorial.
Usando una extensión simple y un editor integrado
En este tutorial, aprenderemos cómo observar fácilmente usando UserDefaults
un editor de Combine.
Sin más preámbulos, comencemos.
Empecemos
Considere un caso en el que desea mantener el volumen de la música de un juego en UserDefaults
. También desea observar el cambio y reaccionar en consecuencia. Entonces, nuestro primer paso es definir la siguiente extensión:
extension UserDefaults { @objc var musicVolume: Float { get { return float(forKey: "music_volume") } set { set(newValue, forKey: "music_volume") } } }
Como podemos ver, el captador devuelve el valor Float
para la clave music_volume
y el establecedor establece el nuevo valor para esa clave.
A continuación, importemos Combine y agreguemos la propiedad subscriptions
para almacenar nuestra futura suscripción:
import UIKit import Combine class ViewController: UIViewController { var subscriptions = Set<AnyCancellable>() override func viewDidLoad() { super.viewDidLoad() } }
Ahora podemos agregar la suscripción real dentro del método viewDidLoad()
:
import UIKit import Combine class ViewController: UIViewController { var subscriptions = Set<AnyCancellable>() override func viewDidLoad() { super.viewDidLoad() UserDefaults.standard .publisher(for: \.musicVolume) .handleEvents(receiveOutput: { musicVolume in print("Music volume is now: \(musicVolume)") }) .sink { _ in } .store(in: &subscriptions) } }
Utilizando el UserDefaults
camino clave, observamos la propiedad musicVolume
. Dentro de handleEvents(receiveOutput:)
operador, simplemente imprimimos un mensaje que contiene el último volumen.
Ahora probemos la suscripción. Agregue estas dos modificaciones programadas la propiedad musicVolume
:
import UIKit import Combine class ViewController: UIViewController { var subscriptions = Set<AnyCancellable>() override func viewDidLoad() { super.viewDidLoad() UserDefaults.standard .publisher(for: \.musicVolume) .handleEvents(receiveOutput: { musicVolume in print("Music volume is now: \(musicVolume)") }) .sink { _ in } .store(in: &subscriptions) DispatchQueue.main.asyncAfter(deadline: .now() + 3) { let randomInteger = (0...100).randomElement()! UserDefaults.standard.musicVolume = Float(randomInteger) } DispatchQueue.main.asyncAfter(deadline: .now() + 6) { let randomInteger = (0...100).randomElement()! UserDefaults.standard.musicVolume = Float(randomInteger) } } }
Generamos un aleatorio valor Float
y asígnelo dos veces con retraso. Ahora, si construimos y ejecutamos la aplicación, veremos el volumen de la música impreso tres veces: una para el valor inicial y las dos últimas para las modificaciones (después de un cierto retraso):
Hemos observado con éxito UserDefaults
.
¡Gracias por leer! Espero que hayas encontrado utilidad en este artículo.
Añadir comentario