【问题标题】:swift use of AnyClass object with as?用 as 快速使用 AnyClass 对象?
【发布时间】:2016-07-18 22:02:39
【问题描述】:

我想这样做:

let myClass: AnyClass = functionReturningClass() // ex. String.self
if let myObject = functionReturningObject() as? myClass { ...

as? myClass 无法编译('myClass 不是类型')。我能做什么?

【问题讨论】:

  • 真正需要做什么?
  • 在您的代码中,myClass 是一个常量的名称。您那里的第一行代码说“有一个名为 myClass 的常量,它可以是任何对象类型,其值由 functionReturningClass() 返回的内容给出”
  • 尝试让子类提供不同的类型
  • 现在 myClass 不是一个类型,它是一个 AnyClass 类型的变量。所以就像 appzYourLife 说的,你真正需要做什么?
  • 我不认为您可以在运行时快速进行类型转换,我想这就是我的困惑所在。我建议使用 isKindaClass 方法。

标签: swift casting type-conversion


【解决方案1】:

不幸的是,这是不可能的——as 必须知道它在编译时要转换的类型。您不能为as 提供变量类型。如果您必须强制转换,那么您将仅限于在编译时工作的泛型和重载等功能。

想一想——编译器应该允许你调用什么方法来调用得到的myObject?不知道myClass 的运行时值是不可能的。因此,这是行不通的。

您仍然可以从functionReturningObject() 返回子类。您仍然可以将它们转换为不同的类型。您只是无法决定在运行时将它们动态转换为什么类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多