【问题标题】:Swift custom Keyboard ErrorSwift 自定义键盘错误
【发布时间】:2015-03-16 06:52:15
【问题描述】:

我不断收到 无法转换表达式的类型“[NSObject : AnyObject]?”到 'NSDictionary' 错误,我不知道该怎么办。我什么都试过了,到处找。你能帮忙吗?我正在 SWIFT 中创建一个自定义键盘,我对此完全陌生,所以我绝对可以使用帮助。

    // Called when `UIKeyboardWillShowNotification` is sent.

func keyboardWillShow(aNotification: NSNotification) {
    let info = aNotification.userInfo as NSDictionary **<<<<<<<<<ERROR HERE>>>>>>>**
    let sizeBegin = info.objectForKey(UIKeyboardFrameBeginUserInfoKey).CGRectValue().size
    let sizeEnd = info.objectForKey(UIKeyboardFrameEndUserInfoKey).CGRectValue().size

    let duration = info.objectForKey(UIKeyboardAnimationDurationUserInfoKey).doubleValue
    let curve = info.objectForKey(UIKeyboardAnimationCurveUserInfoKey).integerValue


    var animationCurve: UIViewAnimationCurve
    if let value = UIViewAnimationCurve.fromRaw(curve) {
        animationCurve = value
    } else {
        animationCurve = UIViewAnimationCurve.EaseInOut
    }

    let insets = UIEdgeInsets(top: 44, left: 0, bottom: sizeEnd.height, right: 0)

    UIView.animateWithDuration(duration, delay: 0, options: UIViewAnimationOptions.CurveEaseInOut, animations: {
        self.textView.contentInset = insets
        self.textView.scrollIndicatorInsets = insets
    }, completion: nil)
}

// Called when `UIKeyboardWillHideNotification` is sent.
func keyboardWillHide(aNotification: NSNotification) {
    let info = aNotification.userInfo as NSDictionary **<<<<<<<<<<ERROR HERE>>>>>>**
    let sizeBegin = info.objectForKey(UIKeyboardFrameBeginUserInfoKey).CGRectValue().size
    let sizeEnd = info.objectForKey(UIKeyboardFrameEndUserInfoKey).CGRectValue().size

    let duration = info.objectForKey(UIKeyboardAnimationDurationUserInfoKey).doubleValue
    let curve = info.objectForKey(UIKeyboardAnimationCurveUserInfoKey).integerValue


    var animationCurve: UIViewAnimationCurve
    if let value = UIViewAnimationCurve.fromRaw(curve) {
        animationCurve = value
    } else {
        animationCurve = UIViewAnimationCurve.EaseInOut
    }

    let insets = UIEdgeInsets(top: 44, left: 0, bottom: sizeEnd.height, right: 0)

    UIView.animateWithDuration(duration, delay: 0, options: UIViewAnimationOptions.CurveEaseInOut, animations: {
        self.textView.contentInset = insets
        self.textView.scrollIndicatorInsets = insets
    }, completion: nil)
}

【问题讨论】:

标签: ios swift keyboard


【解决方案1】:

您的字典是[NSObject:AnyObject]? 类型,这是一个可选类型,必须解包才能使用。由于它是可选的,它可以是nil。处理此问题的一种安全方法是使用 nil 合并运算符 ?? 将其解包:

let info = (aNotification.userInfo ?? [:]) as NSDictionary

如果不是nil,这将打开您的字典,或者如果它是nil,则为您提供一个新的空字典。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-03
  • 2023-03-28
  • 2015-02-08
  • 2014-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多