0Pricing
Swift Academy · Lezione

Invio e osservazione delle notifiche

Invii e ricevi eventi in tutta l’app.

Invio e osservazione delle notifiche è una lezione Swift Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Swift Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Swift Academy include 4 lezioni in totale.

NotificationCenter

NotificationCenter è un meccanismo di broadcast: una parte dell'app pubblica una notifica e un numero qualsiasi di osservatori reagisce, senza che il mittente e i destinatari si conoscano.

Il centro predefinito

La maggior parte del codice utilizza NotificationCenter.default, un centro condiviso che instrada le notifiche all'interno del processo.

import Foundation

let center = NotificationCenter.default
print("Using the default notification center")

Definizione del nome di una notifica

Le notifiche sono identificate da un Notification.Name. Definire una costante evita errori di battitura e centralizza il nome.

import Foundation

extension Notification.Name {
    static let dataUpdated = Notification.Name("dataUpdated")
}
print("Defined a notification name")

Pubblicazione di una notifica

post(name:object:) diffonde la notifica. object è di solito il mittente oppure nil.

import Foundation

let center = NotificationCenter.default
let name = Notification.Name("ping")
center.post(name: name, object: nil)
print("Posted a notification")

Aggiunta di un osservatore (closure)

L'API basata su blocchi addObserver(forName:object:queue:using:) esegue una closure ogni volta che viene generata la notifica e restituisce un token.

import Foundation

let center = NotificationCenter.default
let name = Notification.Name("ping")
let token = center.addObserver(forName: name, object: nil, queue: .main) { _ in
    print("Observer fired")
}
center.post(name: name, object: nil)
_ = token

Osservatori basati su selector

L'API classica utilizza un target e #selector. Il metodo riceve un argomento di tipo Notification.

import Foundation

class Watcher: NSObject {
    func start() {
        NotificationCenter.default.addObserver(
            self, selector: #selector(handle(_:)),
            name: Notification.Name("ping"), object: nil)
    }
    @objc func handle(_ n: Notification) { print("Handled") }
}
Watcher().start()

Ricezione della notifica

La closure o il metodo dell'osservatore riceve un valore Notification che contiene il nome, l'oggetto e userInfo.

import Foundation

let center = NotificationCenter.default
let name = Notification.Name("event")
_ = center.addObserver(forName: name, object: nil, queue: nil) { note in
    print("Got: \(note.name.rawValue)")
}
center.post(name: name, object: nil)

Diffusione uno-a-molti

Molti osservatori possono ascoltare lo stesso nome. Una singola chiamata a post invia la notifica a tutti.

import Foundation

let center = NotificationCenter.default
let name = Notification.Name("refresh")
_ = center.addObserver(forName: name, object: nil, queue: nil) { _ in print("A") }
_ = center.addObserver(forName: name, object: nil, queue: nil) { _ in print("B") }
center.post(name: name, object: nil)

Filtro per oggetto

Passare un object diverso da nil applica un filtro: l'osservatore viene attivato solo per le pubblicazioni provenienti da quel mittente.

import Foundation

let center = NotificationCenter.default
let sender = NSObject()
let name = Notification.Name("scoped")
_ = center.addObserver(forName: name, object: sender, queue: nil) { _ in
    print("Only from sender")
}
center.post(name: name, object: sender)

Notifiche di sistema

Il sistema pubblica molte notifiche integrate, ad esempio per gli eventi della tastiera o del ciclo di vita dell'app, che possono essere osservate nello stesso modo.

import Foundation

// e.g. UIApplication.didEnterBackgroundNotification on iOS
let custom = Notification.Name("appReady")
_ = NotificationCenter.default.addObserver(forName: custom, object: nil, queue: nil) { _ in
    print("App ready")
}

Quando usarlo

NotificationCenter è adatto agli eventi globali uno-a-molti, quando mittente e destinatari devono rimanere disaccoppiati. Per collegamenti stretti uno-a-uno, spesso un delegate è più chiaro.

import Foundation

// Broadcast a global event many parts of the app care about.
let name = Notification.Name("userLoggedOut")
NotificationCenter.default.post(name: name, object: nil)
print("Broadcast logout")

Verifica rapida

Che cosa fa NotificationCenter.default.post(name:object:)?

Riepilogo

NotificationCenter.default disaccoppia mittenti e destinatari: si definisce un Notification.Name, si esegue post e si utilizza addObserver con una closure o un selector per reagire. Supporta la diffusione uno-a-molti e il filtro per oggetto. Prossimo argomento: trasmettere dati in userInfo.

Domande Frequenti

La lezione «Invio e osservazione delle notifiche» è gratuita?

Sì — il testo completo di «Invio e osservazione delle notifiche» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Swift Academy, passa a CoddyKit PRO. Il corso Swift Academy include 4 lezioni in totale.

Cosa imparerò in «Invio e osservazione delle notifiche»?

Invii e ricevi eventi in tutta l’app. Eserciti Swift Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Swift Academy?

Non è richiesta alcuna esperienza precedente. Swift Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.

Quanto tempo richiede la lezione «Invio e osservazione delle notifiche»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Swift Academy?

Sì. Ogni lezione Swift Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Invio e osservazione delle notifiche
  2. Payload userInfo delle notifiche
  3. Rimozione sicura degli observer
  4. Alternative al pattern Observer
← Torna a Swift Academy