Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Types 在swift中检测对象是否正是特定类型,而不是该类型的子类_Types_Swift_Conditional Statements - Fatal编程技术网

Types 在swift中检测对象是否正是特定类型,而不是该类型的子类

Types 在swift中检测对象是否正是特定类型,而不是该类型的子类,types,swift,conditional-statements,Types,Swift,Conditional Statements,在swift中,您可以使用类似以下内容检查对象是否属于特定类型 let object: AnyObject = someOtherObject if object is SKNode { //is SKNode } 在这种情况下,SKShapeNode和SKSpriteNode也会满足这个条件,因为它们是SKNode的子类 检测对象是否属于特定类型而不是该类型的子类的标准方法是什么?这不是操作符的工作方式。如果这样做,您将得到一个编译错误 is运算符用于检查特定类型的对象是否属于给定的子

在swift中,您可以使用类似以下内容检查对象是否属于特定类型

let object: AnyObject = someOtherObject
if object is SKNode {
   //is SKNode
}
在这种情况下,SKShapeNode和SKSpriteNode也会满足这个条件,因为它们是SKNode的子类


检测对象是否属于特定类型而不是该类型的子类的标准方法是什么?

这不是
操作符的工作方式。如果这样做,您将得到一个编译错误

is
运算符用于检查特定类型的对象是否属于给定的子类型。使用
SKNode
SKShapeNode
作为示例,您可以使用
is
来验证键入为
SKNode
的对象是
SKShapeNode
还是
SKSpriteNode

将其粘贴到操场,了解其工作原理:

let shape: SKNode = SKShapeNode()
let sprite: SKNode = SKSpriteNode()
let anotherShape = SKShapeNode()

if shape is SKShapeNode {
    println("is shape")
}

if sprite is SKSpriteNode {
    println("is sprite")
}

if shape is SKNode {
    //this raises a compile error, because the test is always true
}

if anotherShape is SKNode {
    //this raises a compile error, because SKNode is not a subtype of SKShapeNode
}

你可以回到目标C:

if (object as AnyObject).isMemberOfClass(SKNode) {
   //is SKNode
}

在Swift 2.2中,苹果批准的方法是:

if object.dynamicType === SKNode.self {
   // is node
}
一旦实施(Swift 3.0),将更改为:

if object.Self === SKNode.self {
   // is node
}
在swift 3中:

if type(of: object) == SKNode.self {
   // is node
}

如果变量类型为anyobject,则测试并不总是正确的。我的示例非常具体。如果你把上面的代码粘贴到一个操场上,你会得到上面描述的确切结果。谢谢你的回复,塞扎,我并不是想贬低你所说的事实。在我的例子中,对象的类型是AnyObject而不是SKNode,因此我不存在这样的编译错误。我已经更新了问题以规定对象变量的类型。感谢Ashly,这确实适用于我的场景,并且是swift代码,即使返回到objective-c方法。请注意,这甚至适用于本机swift类(只要导入了基础