通知を送信するコードがあります(serialNumberはString):
var dataDict = Dictionary<String, String>()
dataDict["Identity"] = serialNumber
dataDict["Direction"] = "Add"
NSNotificationCenter.defaultCenter().postNotificationName("deviceActivity", object:self, userInfo:dataDict)
そして、この通知を受け取るコード:
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
}
これを達成するためにさまざまなコードを試しましたが、成功しませんでした:
let dict = notification.userInfo
let dict: Dictionary<String, String> = notification.userInfo
let dict: Dictionary = notification.userInfo as Dictionary
そして、私の試みのいくつかはコンパイラを満足させますが、辞書として抽出されたものにアクセスしようとすると、実際の文字列を生成するものはありません:
let sn : String = dict["Identity"]!
let sn : String = dict.valueForKey("Identity") as String
let sn : String = dict.valueForKey("Identity")
質問は次のとおりです。通知を介して渡されたオブジェクト(この場合は辞書)を抽出し、そのオブジェクトのコンポーネント部分(この場合はキーと値)にアクセスするためのSwiftコードの書き方)?
Notification.userInfoタイプはAnyObjectなので、適切な辞書タイプにダウンキャストする必要があります。
辞書の正確なタイプがわかったら、そこから得た値をダウンキャストする必要はありません。ただし、値を使用する前に、辞書に実際に値が存在するかどうかを確認することをお勧めします。
// 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")
}
[NSObject : AnyObject]
のような構造を使用し、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
}