结构的Swift动态类型检查?

前端之家收集整理的这篇文章主要介绍了结构的Swift动态类型检查?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我对 Swift中的动态类型检查感到困惑.

具体来说,我有一个怪异的情况,我想在本质上写一个(或找到)一个函数

func isInstanceOf(obj: Any,type: Any.Type) -> Bool

在Objective-C中,这是isKindOfClass,但这不起作用,因为Any.Type包含Swift结构,它不是类(更不用说NSObject子类).

我不能在这里使用Swift,因为这需要硬编码类型.

我不能使用obj.dynamicType == type,因为这会忽略子类.

Swift book似乎表明此信息丢失,根本不适用于结构:

Classes have additional capabilities that structures do not:

  • Type casting enables you to check and interpret the type of a class instance at runtime.

(在Type Casting一章中,它说“Swift中的类型转换是使用is和as运算符实现的”,因此它似乎是比“in other languages”更广泛的“类型转换”定义.)

但是,因为你不能使用结构,因为你可以将字符串和Ints放入[Any]中,然后将它们拉出来,并使用String或Int来弄清楚它们是什么是. Swift Book的Type Casting章节正是这样做的!

有什么东西和isKindOfClass一样强大,但是对于任何Swift实例?这些信息仍然必须在运行时存在,对吧?

实际上你可以使用is运算符.

Use the type check operator (is) to check whether an instance is of a certain subclass type. The type check operator returns true if the instance is of that subclass type and false if it is not.

由于struct不能被子类化,因此在应用于struct的实例时保证是一致的,因为它将检查它的静态类型,对于类,它将在运行时查询动态类型.

func `is`<T>(instance: Any,of kind: T.Type) -> Bool{
   return instance is T;
}

这对结构和类都有效.

猜你在找的Swift相关文章