你如何找出一个对象的类型(在Swift中)?

你如何找出一个对象的类型(在Swift中)?,第1张

概述当试图理解一个程序,或在某些角落的情况下,它是有用的,能够实际找出什么类型的东西。我知道调试器可以显示一些类型信息,你通常可以依靠类型推理去逃避在这些情况下不指定类型,但仍然,我真的想有一些像python的类型() dynamicType(见this question) 更新:这已经在最近版本的Swift中更改,obj.dynamicType现在提供了对类型的引用,而不是具有动态类型的实例。 这个 当试图理解一个程序,或在某些角落的情况下,它是有用的,能够实际找出什么类型的东西。我知道调试器可以显示一些类型信息,你通常可以依靠类型推理去逃避在这些情况下不指定类型,但仍然,我真的想有一些像python的类型()

dynamicType(见this question)

更新:这已经在最近版本的Swift中更改,obj.dynamicType现在提供了对类型的引用,而不是具有动态类型的实例。

这个似乎是最有前途的,但到目前为止我还没有找到实际的类型

class MyClass {    var count = 0}let mc = MyClass()# update: this Now evaluates as truemc.dynamicType === MyClass.self

我也尝试使用类引用来实例化一个新的对象,这是工作,但奇怪地给了我一个错误,说我必须添加一个必需的初始化:

作品:

class MyClass {    var count = 0    required init() {    }}let myClass2 = MyClass.selflet mc2 = MyClass2()

仍然只有一小步,实际上发现任何给定的对象的类型

编辑:我删除了大量的现在不相关的详细信息 – 看看编辑历史,如果你有兴趣:)

在Swift 2.0中,做这种类型内省的正确方法是用 Mirror struct,
let stringObject:String = "testing"    let stringArrayObject:[String] = ["one","two"]    let vIEwObject = UIVIEw()    let anyObject:Any = "testing"    let stringMirror = Mirror(reflecting: stringObject)    let stringArrayMirror = Mirror(reflecting: stringArrayObject)    let vIEwMirror = Mirror(reflecting: vIEwObject)    let anyMirror = Mirror(reflecting: anyObject)

然后从Mirror结构体访问类型本身,你将使用属性subjectType像这样:

// Prints "String"    print(stringMirror.subjectType)    // Prints "Array<String>"    print(stringArrayMirror.subjectType)    // Prints "UIVIEw"    print(vIEwMirror.subjectType)    // Prints "String"    print(anyMirror.subjectType)

然后你可以使用这样的东西:

if anyMirror.subjectType == String.self {        print("anyObject is a string!")    } else {        print("anyObject is not a string!")    }
总结

以上是内存溢出为你收集整理的你如何找出一个对象的类型(在Swift中)?全部内容,希望文章能够帮你解决你如何找出一个对象的类型(在Swift中)?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1063626.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存