2016-05-25 69 views
0

我的问题更多的是一个普遍的问题,而不是一个具体的问题。看起来,对于用Swift编写的类,您可以使用可选工作流来验证方法是否存在(?)。如果没有,你可以假设它返回nil什么时候在swift中使用respondsToSelector?

这似乎只适用于类是用Swift编写的。 (这是一个修正假设)?

现在,如果您正在引用一个Objective-C类并希望检查是否存在某个方法,则可以使用respondsToSelector检查与选择器#selector

这是否意味着仅用于Objective-C类和Swift类,协议,从Objective-C类继承的协议/类扩展?

让我知道我是否应该扩展任何部分的问题。

+0

请检查这个帖子http://stackoverflow.com/questions/24167791/what-is-the-swift-equivalent-of-respondstoselector –

+0

谢谢你,当猜测当检查协议方法是否已经实现,它仍然基于类型是否符合nsobject。 – Chris

回答

1

几乎没有任何需要在Swift中显式调用respondsToSelector。唯一一次你想要做的是处理一个NSObject,在这种情况下,它可能是一个AnyObject或一个委托协议接受者,无论哪种情况,你都可以使用问号语法(它调用respondsToSelector为你)。

+0

但是当你实现一个可可类或子类时,你仍然在处理nsobject,对吗?我想如果所有的可可类都被转换成了快速的,我不会100%确定。谢谢大家的输入! – Chris

+0

@ cmarti1138:是的,Cocoa类是Objective-C类,所以它们的方法是Objective-C方法,如果它们响应,你可以使用可选机制和AnyObject来调用这些方法。如果你的问题是如果这个表达式的类型不是'AnyObject',你可以先把它转换成'AnyObject':(... as AnyObject).method?(...)' – newacct

+0

Ty for大家的答案! – Chris

0

看来,对于用Swift编写的类,可以使用 可选工作流来验证方法是否存在(?)。如果它不 不,你可以认为它返回零。

这似乎只适用于类是用Swift编写的。 (这是一个修正假设)?

这是不正确的。当您说“使用可选的工作流程来验证方法是否存在”时,我假定您的意思是当您使用Using Swift的“id Compatibility”部分中的“无法识别的选择器和可选链接”中所述的类型AnyObject上的方法调用方法时可可和Objective-C指南。

此功能只有与Objective-C(@objc)方法一起使用。 AnyObject允许您只动态访问Objective-C(@objc)方法。

您可以调用任何Objective-C方法并访问AnyObject值上的任何属性,而不必强制转换为更具体的类类型。此 包含Objective-C兼容方法和用 @objc属性标记的属性。

您不能使用AnyObject来调用纯Swift(非@objc)方法。

+0

对不起,我打算说方法确实存在时。我纠正了我的问题。 – Chris

+0

@ cmarti1138:我改变了引用来说 – newacct

相关问题