swift - Swift - 检查两个对象是否属于相同类型或超类类型
问题描述
我想检查两个对象是否属于 - 或属于 - 同一个超类。
class myClass {}
class mySubclass: myClass {}
let myObject = myClass()
let myOtherObject = myClass()
let mySubclassedObject = mySubclass()
我知道我可以通过这种方式检查类型:
type(of: myObject) == myClass.self // true
type(of: myObject) == type(of: myOtherObject) // true
type(of: mySubclassedObject) == myClass.self // false
最后一条语句返回 false,type(of: <T>)
显然返回对象的最终类。
类型检查的另一种方法是is
关键字:
mySubclassedObject is mySubclass // true
mySubclassedObject is myClass // true
这里两个语句都评估为真,因为is
关键字显然是在考虑超类。但我不能这样做是比较两个对象的类型,如下所示:
myOtherObject is myObject // Use of undeclared type 'myObject'
我需要得到这样的结果:
myObject is myOtherObject // true
mySubclassedObject is myObject // true
myObject is mySubclassedObject // false
我希望能找到类似的东西,.isSubclassOf
但这在 Swift 中似乎不可用。那么我怎样才能得到我想要的结果呢?
解决方案
一种方法是尝试这样的泛型
func isObject<P>(_ object: Any, ofType other: P) -> Bool {
object is P
}
isObject(myObject, ofType: myOtherObject) //true
isObject(mySubclassedObject, ofType: myObject) //true
isObject(myObject, ofType: mySubclassedObject) //false
推荐阅读
- android - 未保存诸如 setJavaScriptEnabled、setBuiltInZoomControls 等 WebView 属性
- model-view-controller - Kendo Telerik MVC 绑定到子网格的属性不起作用
- javascript - HTML5 音频在暂停然后再次播放后变得更响亮
- java - 多个 JSlider 输出 (Java Swing)
- ruby-on-rails - 如何处理来自多个相关模型的约束的模型查询
- ruby - 任何方式在声明中捕获常量的名称?
- java - 测试spring应用程序时不支持405请求方法'POST'
- entity-framework - 何时使用拥有的实体类型而不是仅创建外键或将列直接添加到表中?
- c# - C# MVC 通过 JQuery AJAX 发送对象
- c++ - cpp中头文件的用途