当前位置: 首页 > 面试题库 >

Swift类自省和泛型

王长卿
2023-03-14
问题内容

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

这里是问题:

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

问题答案:

那么,对于一个,雨燕等同的[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在操场上给了我一个错误。



 类似资料:
  • 问题内容: 我正在编写一些Swift代码,其中有一个包含通用类型的数组: 稍后在我的代码中,我需要确定存储在数组中的类型。我尝试使用文档中描述的类型转换技术(尽管泛型没有使用过)。 上面的switch语句在编译时导致以下错误: 发出IR SIL功能@ _TFC19Adder_Example Mac6Matrix9transposeUS 7ElementfGS0_Q__FT_GSqGS0_Q___以

  • 问题内容: 我正在尝试基于指定的泛型类型进行强制转换和/或生成一个变量。我知道并没有快速的类型擦除,但是除了泛型的指定条件(例如符合基类)外,泛型似乎并没有保留类型。看来我可以强制转换或初始化的只是基类。更奇怪的是,当我在调试器中时,泛型似乎对正确的类具有RawPointer,甚至变量看起来都像是正确的类型: 编辑: 从Xcode 6.1开始,这仍然是一个问题(简化的代码由Gregory Higl

  • Swift 4语言提供了泛型()功能来编写灵活且可重用的函数和类型。 泛型用于避免重复并提供抽象。 Swift 4标准库使用泛型代码构建。 Swift 4中的数组和字典类型属于泛型集合。 使用数组和字典,数组可定义为保存值和值或任何其他类型。 示例代码 当使用playground运行上述程序时,得到以下结果 - 泛型函数:类型参数 泛型函数可用于访问任何数据类型,如或。 当使用playground

  • Swift 提供了泛型让你写出灵活且可重用的函数和类型。 Swift 标准库是通过泛型代码构建出来的。 Swift 的数组和字典类型都是泛型集。 你可以创建一个Int数组,也可创建一个String数组,或者甚至于可以是任何其他 Swift 的类型数据数组。 以下实例是一个非泛型函数 exchange 用来交换两个 Int 值: 实例// 定义一个交换两个变量的函数 func swapTwoInts

  • 类型和泛型 类型系统的首要目的是检测程序错误。类型系统有效的提供了一个静态检测的有限形式,允许我们代码中明确某种类型的变量并且编译器可以验证。类型系统当然也提供了其他好处,但错误检测是他存在的理由(Raison d’Être) 我们使用类型系统应当反映这一目标,但我们必须考虑到读者(译注:读你代码的人):明智地使用类型可以增加清晰度,而过份聪明只会迷乱。 Scala的强大类型系统是学术探索和实践共

  • 我们既因信称义,就藉着我们的主耶稣基督,得与神相和。我们又藉着他,因信得进入现在所站的这恩典中,并且欢欢喜喜盼望神的荣耀。不但如此,就是在患难中,也是欢欢喜喜的,因为知道患难生忍耐。忍耐生老练,老练生盼望。盼望不至于羞耻,因为所赐给我们的圣灵,将神的爱浇灌在我们心里。(ROMANS 5:1-5) 自省 特别说明,这一讲的内容不是我写的,是我从《Python自省指南》抄录过来的,当然,为了适合本教程