一尘不染

Swift类自省和泛型

swift

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

这里是问题:

  • 有一个Swift相当于Obj-C的self.class吗?
  • 有没有办法使用AnyClassfrom 的结果实例化一个类NSClassFromString
  • 有没有一种方法可以AnyClass严格从通用参数获取信息或以其他方式键入信息T?(类似于C#的typeof(T)语法)

阅读 395

收藏
2020-07-07

共1个答案

一尘不染

那么,对于一个,雨燕等同的[NSString class]IS
.self(见元类型的文档,但他们非常薄)。

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

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

同样,我尝试了快速班…

class MyClass {

}

let MyClassRef = MyClass.self

// ERROR :(
let my_obj = MyClassRef()

嗯…错误说:

游乐场执行失败:错误::16:1:错误:使用元类型值构造类类型为“ X”的对象需要使用“ @required”初始化程序

 Y().me()
 ^
 <REPL>:3:7: note: selected implicit initializer with type '()'
 class X {
       ^

我花了一段时间才弄清楚这意味着什么……事实证明它希望全班有一个 @required init()

class X {
    func me() {
        println("asdf")
    }

    required init () {

    }
}

let Y = X.self

// prints "asdf"
Y().me()

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

2020-07-07