Payload Notifikasi userInfo
Lampirkan data bertipe pada notifikasi.
Payload Notifikasi userInfo adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Swift Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Swift Academy mencakup 4 pelajaran total.
userInfo Notifikasi
Notifikasi dapat membawa data dalam kamus userInfo, sehingga pengamat menerima detail tentang hal yang terjadi.
Mengirim dengan userInfo
Teruskan sebuah kamus ke post(name:object:userInfo:). Kunci dan nilainya bertipe Any, sehingga muatan apa pun dapat digunakan.
import Foundation
let center = NotificationCenter.default
let name = Notification.Name("scoreChanged")
center.post(name: name, object: nil, userInfo: ["score": 100])
print("Posted with payload")Membaca userInfo
Di dalam pengamat, baca notification.userInfo dan lakukan konversi ke tipe nilai yang Anda harapkan.
import Foundation
let center = NotificationCenter.default
let name = Notification.Name("scoreChanged")
_ = center.addObserver(forName: name, object: nil, queue: nil) { note in
if let score = note.userInfo?["score"] as? Int {
print("Score: \(score)")
}
}
center.post(name: name, object: nil, userInfo: ["score": 42])Beberapa Nilai
Kamus tersebut dapat menyimpan beberapa kunci untuk mengemas data yang saling berkaitan.
import Foundation
let center = NotificationCenter.default
let name = Notification.Name("login")
_ = center.addObserver(forName: name, object: nil, queue: nil) { note in
let user = note.userInfo?["user"] as? String ?? "?"
let admin = note.userInfo?["admin"] as? Bool ?? false
print("\(user) admin=\(admin)")
}
center.post(name: name, object: nil, userInfo: ["user": "ada", "admin": true])Keys yang Aman terhadap Tipe
Menggunakan kunci berupa literal string mudah menimbulkan kesalahan. Tentukan konstanta untuk menghindari ketidakcocokan antara pengirim dan pengamat.
import Foundation
enum Keys { static let amount = "amount" }
let center = NotificationCenter.default
let name = Notification.Name("purchase")
center.post(name: name, object: nil, userInfo: [Keys.amount: 9.99])
print("Used a constant key")Melakukan Konversi dengan Hati-Hati
Karena nilainya bertipe Any, konversi tipe dapat gagal. Gunakan pengikatan opsional agar tipe yang salah tidak menyebabkan aplikasi mogok.
import Foundation
let note = Notification(name: Notification.Name("x"), object: nil, userInfo: ["n": "oops"])
if let n = note.userInfo?["n"] as? Int {
print(n)
} else {
print("Wrong type, handled safely")
}Struct Kustom sebagai Muatan
Anda dapat menyimpan seluruh struktur sebagai nilai dan mengonversinya kembali, sehingga muatan tetap bertipe kuat.
import Foundation
struct Event { let id: Int }
let note = Notification(name: Notification.Name("e"), object: nil, userInfo: ["event": Event(id: 7)])
if let e = note.userInfo?["event"] as? Event {
print("Event id: \(e.id)")
}Membungkus Pengiriman
Fungsi pembantu yang membuat userInfo menjaga agar pembuatan muatan tetap konsisten di seluruh aplikasi.
import Foundation
let name = Notification.Name("progress")
func postProgress(_ value: Int) {
NotificationCenter.default.post(name: name, object: nil, userInfo: ["value": value])
}
postProgress(75)
print("Posted progress")Membungkus Pembacaan
Padukan fungsi pembantu tersebut dengan pengakses bertipe agar pengamat tidak mengulangi logika konversi.
import Foundation
extension Notification {
var progressValue: Int? { userInfo?["value"] as? Int }
}
let n = Notification(name: Notification.Name("progress"), object: nil, userInfo: ["value": 50])
print(n.progressValue ?? -1)Kunci Bawaan vs Kunci yang Hilang
Jika sebuah kunci tidak ada, hasil konversinya adalah nil. Berikan nilai bawaan yang masuk akal dengan operator penggabungan nil.
import Foundation
let n = Notification(name: Notification.Name("y"), object: nil, userInfo: [:])
let count = n.userInfo?["count"] as? Int ?? 0
print("Count defaulted to \(count)")Jaga Muatan Tetap Kecil
userInfo paling cocok untuk data kecil yang dapat diserialisasi. Untuk objek besar, teruskan pengenal dan biarkan pengamat mengambil sisanya.
import Foundation
let name = Notification.Name("itemUpdated")
// Send just an id, not a heavy object graph.
NotificationCenter.default.post(name: name, object: nil, userInfo: ["id": 1234])
print("Posted a lightweight payload")Pemeriksaan Singkat
Tipe apa yang dimiliki nilai-nilai yang disimpan dalam kamus userInfo sebuah notifikasi?
Ringkasan
Kamus userInfo membawa data notifikasi sebagai nilai Any, sehingga pengamat harus melakukan konversi dengan hati-hati. Gunakan kunci konstan, fungsi pembantu, dan pengakses bertipe, berikan nilai bawaan untuk kunci yang hilang, serta jaga muatan tetap kecil. Berikutnya: menghapus pengamat dengan aman.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Payload Notifikasi userInfo” gratis?
Ya — teks lengkap “Payload Notifikasi userInfo” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Swift Academy, upgrade ke CoddyKit PRO. Kursus Swift Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Payload Notifikasi userInfo”?
Lampirkan data bertipe pada notifikasi. Kamu berlatih Swift Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Swift Academy?
Tidak diperlukan pengalaman sebelumnya. Swift Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Payload Notifikasi userInfo” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Swift Academy ini?
Ya. Setiap pelajaran Swift Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Mengirim dan Mengamati Notifikasi
- Payload Notifikasi userInfo
- Menghapus Pengamat dengan Aman
- Alternatif Pola Observer