Читать словарь из NSEvent userData
Я создал NSTrackingArea
и я передаю словарь в userInfo
аргумент.
let trackingData = ["section": 1, "sectionRow": 12, "done": false]
let trackingArea = NSTrackingArea(
rect: cellView.bounds,
options: [NSTrackingAreaOptions.MouseEnteredAndExited, NSTrackingAreaOptions.ActiveAlways],
owner: self,
userInfo: trackingData as? [String : AnyObject])
cellView.addTrackingArea(trackingArea)
Это событие успешно получено здесь;
override func mouseEntered(event: NSEvent) {
print("Mouse Entered \(event.userData)")
}
Как я могу прочитать значения для раздела и т.д. из userData?
2 ответа
Используя ваш синтаксис
if let userData = event.trackingArea?.userInfo as? [String : AnyObject] {
let section = userData["section"] as! Int
}
Но если вы передадите done
ключ как Int
со значением 0
или же 1
скорее, чем Bool
вам не нужно приводить значения словаря, потому что он отличается [String:Int]
let trackingArea = NSTrackingArea(rect: ... , userInfo: trackingData)
а также
if let userData = event.trackingArea?.userInfo as? [String : Int] {
let section = event.userData["section"]!
}
Дополнительные привязки предназначены для обеспечения безопасности, если есть еще события для получения и отслеживания.
В документации говорится:
При обработке такого события вы можете получить словарь, отправив
userData
кNSEvent
объект.
Но, похоже, это неправильно. Мне так и не удалось каким-то образом отобразить или отобразитьNSEvent.userData
(который имеет типUnsafeMutableRawPointer?
) вернуться к[String: Any]
. Вместо этого вы можете сделать это:
override func mouseEntered(with event: NSEvent) {
let userInfo = event.trackingArea!.userInfo!
}