Swift “与”之间有区别吗;是";这是属于阶级的吗?
Swift提供Swift “与”之间有区别吗;是";这是属于阶级的吗?,swift,Swift,Swift提供is关键字(和as?)以检查对象是否可以成功向下投射: if foo is MyClass { // ... } 但是NSObjectProtocol还提供了原始的func-iskindof类(aClass:AnyClass!)->Bool: if something.isKindOfClass(MyClass) { // ... } 对于符合NSObjectProtocol的类,这真的有很大不同吗?是的有一个区别:是适用于Swift中的任何类,而是类()仅适用
is
关键字(和as?
)以检查对象是否可以成功向下投射:
if foo is MyClass {
// ...
}
但是NSObjectProtocol
还提供了原始的func-iskindof类(aClass:AnyClass!)->Bool
:
if something.isKindOfClass(MyClass) {
// ...
}
对于符合
NSObjectProtocol
的类,这真的有很大不同吗?是的有一个区别:是
适用于Swift中的任何类,而是类()
仅适用于属于NSObject
的子类的类,或者实现NSObjectProtocol
的类。有些差异:
适用于非类类型is
只对对象起作用,以检查它们是否是类的实例isKindOfClass:
- 正如其他人已经提到的,
是在属于类:
上声明的,所以它不允许您在该协议中未知的表达式上使用它,除了NSObjectProtocol
。实际上,本机Swift类(非正式地)也符合AnyObject
,因此如果您将它们转换为NSObjectProtocol
,您仍然可以使用AnyObject
:isKindOfClass
(作为AnyObject的内容)。isKindOfClass(MyClass)
也可用于对照协议进行检查,而在is
方法方面的等效方法是NSObjectProtocol
conformsToProtocol:
采用必须在编译时硬编码的类型is
接受一个表达式,该表达式的值可以在运行时计算。我不知道有什么方法可以检查一个对象是否是一个类(包括子类)的实例,该类是在运行时仅使用Swift标准库计算的isKindOfClass:
isKindOfClass:
方法检查对象是否属于特定的类类型,使用conformsToProtocol:
方法检查对象是否符合指定的协议。在Swift中,您可以使用is
操作符检查类型,或使用as?
操作符向下转换到该类型来完成此任务
您可以使用is
操作符检查实例是否属于某个子类类型。如果实例属于该子类类型,is
运算符返回true
,如果不是,则返回false
迅捷的
我认为主要区别在于
as?
/是适用于不符合NSObjectProtocol
的对象/结构。我认为OP真正询问的是is
而不是as?
Doh——这个问题最初指定为as?
,但似乎已经编辑过了。我会修正我的答案。很抱歉突然编辑-我意识到is
比as?
:)更接近iskindof class
)别担心--我(无意中)几乎偷了@BryanChen的评论,以便在我的答案中使用。对不起,布莱恩!为了公平起见,我将标记此社区Wiki。“而isKindOfClass()仅适用于作为NSObject子类或以其他方式实现NSObjectProtocol的类。”如果您将其转换为AnyObject
:(类似于AnyObject的内容)。isKindOfClass(MyClass)
if object is UIButton {
// object is of type UIButton
} else {
// object is not of type UIButton
}