come passare più valori con una notifica in swift

Come inviare un numero e una Stringa attraverso una notifica …

let mynumber=1;
let mytext="mytext";
NSNotificationCenter.defaultCenter().postNotificationName("refresh", object: ?????????????);

e ricevere i valori nel ricevitore ?

func refreshList(notification: NSNotification){
        let receivednumber=??????????
        let receivedString=?????????
    }
InformationsquelleAutor mcfly soft | 2015-05-19

 

6 Replies
  1. 30

    Si può avvolgere in un NSArray o un NSDictionary o un Oggetto personalizzato.

    Ad esempio:

    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"]
    }
  2. 24

    Xcode 8.3.1 • Swift 3.1

    extension Notification.Name {
        static let refresh = Notification.Name("refresh")
    }

    let object: [String: Any] = ["id": 1, "email": "[email protected]"]
    NotificationCenter.default.post(name: .refresh, object: object)

    NotificationCenter.default.addObserver(self, selector: #selector(refreshList), name: .refresh, object: nil)
    
    //Swift 4 or later note: add @objc to the selector `@objc func ...`
    //don't forget  vvv add an underscore before the view controller method parameter 
    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)
            }
        }
    }
  3. 14

    È possibile utilizzare il userInfo proprietà di Notification:

    NotificationCenter.default.post(name: Notification.Name("refresh"),
                                    object: nil,
                                    userInfo: ["number":yourNumber, "string":yourString])

    e per recuperare:

    func refreshList(notification: Notification){
        let receivednumber = notification.userInfo?["number"] as? Int ?? 0
        let receivedString = notification.userInfo?["string"] as? String ?? ""
    }
  4. 4

    In realtà ci sono un sacco di modo per fare questo. Uno di loro è quello di passare un array di oggetti come :

    let arrayObject : [AnyObject] = [mynumber,mytext]
    
    NSNotificationCenter.defaultCenter().postNotificationName("refresh", object: arrayObject)
    
    func refreshList(notification: NSNotification){
    
        let arrayObject =  notification.object as! [AnyObject]
    
        let receivednumber = arrayObject[0] as! Int
        let receivedString = arrayObject[1] as! String
    }
  5. 2

    Swift 4.0

    Prima creare un dizionario per i valori di più.

    let name = "Abhi"
    let age = 21
    let email = "[email protected]"
    let myDict = [ "name": name, "age":age, "email":email]
    //post myDict
    NotificationCenter.default.post(name: NSNotification.Name(rawValue: "post"), object: nil, userInfo: myDict)

    Aggiungere osservatore in altre ViewController

    NotificationCenter.default.addObserver(self, selector: #selector(doThisWhenNotify(notification:)), name: NSNotification.Name(rawValue: "post"), object: nil)
    
    func doThisWhenNotify(notification : NSNotification) {
        let info = notification.userInfo
        print("name : ",info["name"])
        print("age : ",info["age"])
        print("email : ",info["email"])
    
    }
  6. 1

    Swift 4.0, sto passando la singola chiave:valore, è possibile aggiungere più di chiavi e valori.

       NotificationCenter.default.post(name:NSNotification.Name(rawValue: "updateLocation"), object: ["location":"India"])

    Aggiunta di Osservatore e definizione del Metodo. È inoltre necessario rimuovere osservatore.

    NotificationCenter.default.addObserver(self, selector: #selector(getDataUpdate), name: NSNotification.Name(rawValue: "updateLocation"), object: nil)
    
    @objc func getDataUpdate(notification: Notification) {
            guard let object = notification.object as? [String:Any] else {
                return
            }
            let location = object["location"] as? String
            self.btnCityName.setTitle(location, for: .normal)
    
            print(notification.description)
            print(notification.object ?? "")
            print(notification.userInfo ?? "")
        }

Lascia un commento