ios - Xcode 8 beta 6 中的模糊错误

标签 ios swift xcode error-handling

更新到 Xcode 8 beta 6 后,出现以下错误:

Value of type 'Any' has no member 'cgRectValue'

在以下 block 上:

var tmpContentViewFrameOrigin: CGPoint?
var tmpCircleViewFrameOrigin: CGPoint?
var keyboardHasBeenShown:Bool = false

func keyboardWillShow(_ notification: Notification) {
    keyboardHasBeenShown = true
    if let userInfo = (notification as NSNotification).userInfo {
        if let beginKeyBoardFrame = userInfo[UIKeyboardFrameBeginUserInfoKey]!.cgRectValue.origin.y {
            if let endKeyBoardFrame = userInfo[UIKeyboardFrameEndUserInfoKey]?.cgRectValue.origin.y {
                tmpContentViewFrameOrigin = self.contentView.frame.origin
                tmpCircleViewFrameOrigin = self.circleBG.frame.origin
                let newContentViewFrameY = beginKeyBoardFrame - endKeyBoardFrame - self.contentView.frame.origin.y
                let newBallViewFrameY = self.circleBG.frame.origin.y - newContentViewFrameY
                self.contentView.frame.origin.y -= newContentViewFrameY
                self.circleBG.frame.origin.y = newBallViewFrameY
            }
        }
    }
}

特别是这两行:

  if let beginKeyBoardFrame = userInfo[UIKeyboardFrameBeginUserInfoKey]!.cgRectValue.origin.y {
     if let endKeyBoardFrame = userInfo[UIKeyboardFrameEndUserInfoKey]?.cgRectValue.origin.y {

我可能遗漏了一些非常简单的东西……有什么建议吗?

最佳答案

cgRectValueNSValue 类的一个属性。您从 userInfo 字典中得到的内容不知道是 NSValue,因此您无法访问它的 NSValue 属性。

为了让编译器允许您使用这些属性,您需要让它知道您希望该值是一个 NSValue:

if let beginKeyBoardFrame = (userInfo[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue.origin.y {

(这之前不会导致编译器错误,因为导入的 Cocoa API 中的字典与 AnyObject 的值类型桥接。AnyObject 有一些像 ObjC id 类型,因为编译器会让你调用它的任何方法/属性——结果包装在 Optional 中,因为它可能不存在。现在字典有 Any 作为它们的值类型,您需要明确说明您期望值类型是什么。)

关于ios - Xcode 8 beta 6 中的模糊错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39001688/

相关文章:

ios - NSNotification 没有调用@selector 方法

ios - CATransform3DRotate 之后的 View 裁剪

ios - 在创建时向 UITableViewCell 添加偏移量?

xcode - 重命名 xcode 生成的配置文件

ios - MapBox iOS SDK 框架

iPhone 调整 subview 和原点的大小

ios - 检查具有可达性的网络连接 - IsWWAN 标志始终为 'false'

ios - swift、watchkit 中的引用接口(interface) Controller

ios - firebase 崩溃报告上传的错误符号文件

php - 无法读取数据,因为它的格式不正确 Xcode 11