从NSEvent userData读取字典

时间:2016-01-13 14:41:16

标签: swift cocoa nsevent nstrackingarea

我创建了一个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读取section等的值?

1 个答案:

答案 0 :(得分:3)

使用语法

if let userData = event.trackingArea?.userInfo as? [String : AnyObject] {
  let section = userData["section"] as! Int
}

但如果您将done密钥作为Int传递的值为01而不是Bool,则您不需要投放字典的值,因为它是不同的[String:Int]

let trackingArea = NSTrackingArea(rect: ... , userInfo: trackingData)

if let userData = event.trackingArea?.userInfo as? [String : Int] {
  let section = event.userData["section"]!
}  

如果有更多事件要接收和跟踪,可选绑定是为了安全。