加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Swift类的内省和泛型

发布时间:2020-12-14 06:16:31 所属栏目:百科 来源:网络整理
导读:我试图动态创建一个基于类实例类型使用泛型,但我遇到类内省的困难。 这里有问题: 是否有一个Swift相当于Obj-C的self.class? 有没有办法实例化一个类使用来自NSClassFromString的AnyClass结果? 有没有办法获得AnyClass或者严格从一个通用参数T类型信息?
我试图动态创建一个基于类实例类型使用泛型,但我遇到类内省的困难。

这里有问题:

>是否有一个Swift相当于Obj-C的self.class?
>有没有办法实例化一个类使用来自NSClassFromString的AnyClass结果?
>有没有办法获得AnyClass或者严格从一个通用参数T类型信息? (类似于C#的typeof(T)语法)

好吧,一个,Swift等效的[NSString类]是.self(见 Metatype docs,虽然他们很瘦)。

事实上,NSString.class甚至不工作!你必须使用NSString.self。

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

类似地,使用swift类我试过…

class MyClass {

}

let MyClassRef = MyClass.self

// ERROR :(
let my_obj = MyClassRef()

嗯…错误说:

Playground execution failed: error: :16:1: error: constructing an object of class type ‘X’ with a metatype value requires an ‘@required’ initializer

06002

我花了一段时间来弄清楚这是什么意思…结果,它想让类有一个@required init()

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

    required init () {

    }
}

let Y = X.self

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

一些文档将此称为.Type,但MyClass.Type在操作中给我一个错误。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读