uiapplicationdidbecomeactivenotification observer notification example defaultcenter dictionary notifications swift

dictionary - notification - observer ios swift



Cómo acceder a un Diccionario pasado a través de NSNotification, usando Swift (2)

Como el tipo notification.userInfo es AnyObject, debe bajarlo al tipo de diccionario apropiado.

Después de conocer el tipo exacto de diccionario, no necesita descifrar los valores que obtiene de él. Pero es posible que desee verificar si los valores están realmente presentes en el diccionario antes de usarlos:

// First try to cast user info to expected type if let info = notification.userInfo as? Dictionary<String,String> { // Check if value present before using it if let s = info["Direction"] { print(s) } else { print("no value for key/n") } } else { print("wrong userInfo type") }

Tengo un código que envía una notificación (donde serialNumber es una cadena):

var dataDict = Dictionary<String, String>() dataDict["Identity"] = serialNumber dataDict["Direction"] = "Add" NSNotificationCenter.defaultCenter().postNotificationName("deviceActivity", object:self, userInfo:dataDict)

Y el código que recibe esta notificación:

func deviceActivity(notification: NSNotification) { // This method is invoked when the notification is sent // The problem is in how to access the Dictionary and pull out the entries }

He intentado una variedad de código para lograr esto, sin éxito:

let dict = notification.userInfo let dict: Dictionary<String, String> = notification.userInfo let dict: Dictionary = notification.userInfo as Dictionary

Y aunque algunos de mis intentos satisfacen al compilador, ninguno ha producido cadenas reales al intentar acceder a lo que se ha extraído como diccionario:

let sn : String = dict["Identity"]! let sn : String = dict.valueForKey("Identity") as String let sn : String = dict.valueForKey("Identity")

Entonces, la pregunta es: ¿cómo escribo el código Swift para extraer un objeto, en este caso un Diccionario, que fue pasado a través de una notificación, y acceder a las partes componentes de ese objeto (en este caso, las claves y valores)?


Debería usar una estructura como [NSObject : AnyObject] y recuperar el valor de NSDictionary yourLet[key]

func keyboardWillShown(notification : NSNotification){ let tmp : [NSObject : AnyObject] = notification.userInfo! let duration : NSNumber = tmp[UIKeyboardAnimationDurationUserInfoKey] as NSNumber let scalarDuration : Double = duration.doubleValue }