从 NSEvent 用户数据中读取字典
Read dictionary from 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 读取部分等的值?
使用你的语法
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"]!
}
如果有更多事件要接收和跟踪,可选绑定是为了安全起见。
我创建了一个 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 读取部分等的值?
使用你的语法
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"]!
}
如果有更多事件要接收和跟踪,可选绑定是为了安全起见。