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
}