gpt4 book ai didi

introspection - Swift 类自省(introspection)和泛型

转载 作者:IT王子 更新时间:2023-10-29 04:56:00 26 4
gpt4 key购买 nike

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

问题如下:

  • 是否有与 Obj-C 的 self.class 等效的 Swift?
  • 有没有办法使用 NSClassFromStringAnyClass 结果实例化一个类?
  • 有没有办法从通用参数 T 中严格获取 AnyClass 或其他类型信息? (类似于 C# 的 typeof(T) 语法)

最佳答案

好吧,一方面,[NSString class] 的 Swift 等价物是 .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

 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 在 Playground 上给我一个错误。

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com