你如何找出一个对象的类型(在Swift中)?
发布时间:2020-12-14 06:19:03 所属栏目:百科 来源:网络整理
导读:当试图理解一个程序,或在某些角落的情况下,它是有用的,能够实际找出什么类型的东西。我知道调试器可以显示一些类型信息,你通常可以依靠类型推理去逃避在这些情况下不指定类型,但仍然,我真的想有一些像python的类型() dynamicType(见this question) 更
当试图理解一个程序,或在某些角落的情况下,它是有用的,能够实际找出什么类型的东西。我知道调试器可以显示一些类型信息,你通常可以依靠类型推理去逃避在这些情况下不指定类型,但仍然,我真的想有一些像python的类型()
dynamicType(见this question) 更新:这已经在最近版本的Swift中更改,obj.dynamicType现在提供了对类型的引用,而不是具有动态类型的实例。 这个似乎是最有前途的,但到目前为止我还没有找到实际的类型 class MyClass { var count = 0 } let mc = MyClass() # update: this now evaluates as true mc.dynamicType === MyClass.self 我也尝试使用类引用来实例化一个新的对象,这是工作,但奇怪地给了我一个错误,说我必须添加一个必需的初始化: 作品: class MyClass { var count = 0 required init() { } } let myClass2 = MyClass.self let 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!") } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |