我正在尝试使用泛型动态创建基于class实例的类型,但是我遇到了类自省(introspection)的困难。

这里是问题:

  • 是否有与Obj-C的self.class等效的Swift?
  • 是否可以使用AnyClassNSClassFromString结果实例化类?
  • 是否有一种方法可以严格从通用参数AnyClass中获取T或以其他方式键入信息? (类似于C#的typeof(T)语法)
  • 最佳答案

    好吧,其中之一是,Swift的[NSString class]等效项是.self(请参阅Metatype docs,尽管它们很薄)。

    实际上,NSString.class甚至不起作用!您必须使用NSString.self

    let s = NSString.self
    var str = s()
    str = "asdf"
    

    同样,我尝试了快速类
    class MyClass {
    
    }
    
    let MyClassRef = MyClass.self
    
    // ERROR :(
    let my_obj = MyClassRef()
    

    嗯...错误说:



    我花了一段时间才弄清楚这意味着什么……事实证明它希望该类具有@required init()
    class X {
        func me() {
            println("asdf")
        }
    
        required init () {
    
        }
    }
    
    let Y = X.self
    
    // prints "asdf"
    Y().me()
    

    一些文档将其称为.Type,但是MyClass.Type在操场上给了我一个错误。

    关于introspection - Swift类自省(introspection)和泛型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24049673/

    10-10 23:59