iosswiftnsvalue

How to get a value from NSValue in Swift?


Here's what I've tried so far

func onKeyboardRaise(notification: NSNotification) {
    var notificationData = notification.userInfo
    var duration = notificationData[UIKeyboardAnimationDurationUserInfoKey] as NSNumber
    var frame = notificationData[UIKeyboardFrameBeginUserInfoKey]! as NSValue
    var frameValue :UnsafePointer<(CGRect)> = nil;
    frame.getValue(frameValue)
}

But I always seem to crash at frame.getValue(frameValue).

It's a little bit confusing because the documentation for UIKeyboardFrameBeginUserInfoKey says it returns a CGRect object, but when I log frame in the console, it states something like NSRect {{x, y}, {w, h}}.


Solution

  • getValue() must be called with a pointer to an (initialized) variable of the appropriate size:

    var frameValue = CGRect(x: 0, y: 0, width: 0, height: 0)
    frame.getValue(&frameValue)
    

    But it is simpler to use the convenience method:

    let frameValue = frame.CGRectValue() // Swift 1, 2
    let frameValue = frame.cgRectValue() // Swift 3