【问题标题】:Error after converting to Swift 3 ( AnyObject is not a subtype of UIFontDescriptor )转换为 Swift 3 后出错( AnyObject 不是 UIFontDescriptor 的子类型)
【发布时间】:2017-08-04 04:02:45
【问题描述】:

在将我的 swift 代码转换为 swift 3 之后,我得到了以下错误:

( AnyObject 不是 UIFontDescriptor 的子类型)在我的代码中

 public init(controller : UIViewController) {
    super.init()

    addResponderFromView(controller.view)
}

deinit {

    for infoDict in textFieldInfoCache {

        let view : AnyObject = (infoDict as AnyObject).object(forKey: kIQTextField)!

        if let textField = view as? UITextField {

            let returnKeyTypeValue = infoDict[kIQTextFieldReturnKeyType] as! NSNumber
            textField.returnKeyType = UIReturnKeyType(rawValue: returnKeyTypeValue.intValue)!

            textField.delegate = infoDict[kIQTextFieldDelegate] as! UITextFieldDelegate?
        } else if let textView = view as? UITextView {

            textView.returnKeyType = UIReturnKeyType(rawValue: (infoDict[kIQTextFieldReturnKeyType] as! NSNumber).intValue)!

            let returnKeyTypeValue = infoDict[kIQTextFieldReturnKeyType] as! NSNumber
            textView.returnKeyType = UIReturnKeyType(rawValue: returnKeyTypeValue.intValue)!

            textView.delegate = infoDict[kIQTextFieldDelegate] as! UITextViewDelegate?
        }
    }

    textFieldInfoCache.removeAllObjects()
}

请看图。任何想法如何解决这个问题?

【问题讨论】:

  • 你为什么一直将infoDict 转换为AnyObject?而且,就此而言,为什么使用object(forKey:) 而不仅仅是["key"]
  • 你的infoDict是什么类型的?
  • AnyObject 在 Swift 3 中总是很糟糕。关心真正的类型

标签: ios swift3 anyobject


【解决方案1】:

我的猜测是,在 Swift 3 中,UIFontDescriptor 是一个结构体。

结构是值类型,而不是对象类型。 (Any,而不是 AnyObject。)尝试将其转换为 Any 而不是 AnyObject

【讨论】:

  • 如果你的意思是这样:让视图:Any = (infoDict as AnyObject).object(forKey: kIQTextField)!它可以工作,但其余部分仍为红色:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-07
  • 1970-01-01
  • 1970-01-01
  • 2016-11-17
相关资源
最近更新 更多