how to pass multiple values with a notification in swift
You could wrap them in an NSArray
or a NSDictionary
or a custom Object.
Eg:
let mynumber=1;let mytext="mytext";let myDict = [ "number": mynumber, "text":mytext]NSNotificationCenter.defaultCenter().postNotificationName("refresh", object:myDict);func refreshList(notification: NSNotification){ let dict = notification.object as! NSDictionary let receivednumber = dict["number"] let receivedString = dict["mytext"]}
Swift 4 or later
Declare a notification name to be used
extension Notification.Name { static let refresh = Notification.Name("refresh")}
Add an observer for that name in your view controller viewDidLoad method and a selector to get the notification object
NotificationCenter.default.addObserver(self, selector: #selector(refreshList), name: .refresh, object: nil)
@objc func refreshList(_ notification: Notification) { if let object = notification.object as? [String: Any] { if let id = object["id"] as? Int { print(id) } if let email = object["email"] as? String { print(email) } }}
Post your notification with your object:
let object: [String: Any] = ["id": 1, "email": "abc@def.com"]NotificationCenter.default.post(name: .refresh, object: object)
You can use the userInfo
property of Notification
:
NotificationCenter.default.post(name: Notification.Name("refresh"), object: nil, userInfo: ["number":yourNumber, "string":yourString])
and to retrieve:
func refreshList(notification: Notification){ let receivednumber = notification.userInfo?["number"] as? Int ?? 0 let receivedString = notification.userInfo?["string"] as? String ?? ""}