何时在swift中使用respondsToSelector?

时间:2016-05-25 19:49:29

标签: objective-c swift class protocols

我的问题更多的是一般性问题,而不是具体问题。对于使用Swift编写的类,您可以使用可选工作流来验证方法是否存在(?)。如果它没有,您可以假设它返回nil

只有在使用Swift编写类时才会出现这种情况。 (这是一个修正假设)?

现在,如果您要引用Objective-C类并想要检查方法是否存在,则可以使用respondsToSelector检查选择器#selector

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

如果我应该扩展我的问题的任何部分,请告诉我。

2 个答案:

答案 0 :(得分:1)

几乎没有任何需要在Swift中明确调用CategoryView。你想要这样做的唯一时间是处理NSObject,在这种情况下,它可能是AnyObject或委托协议采用者,在任何一种情况下你都可以使用问号语法(调用{ {1}}对你而言。)

答案 1 :(得分:0)

  

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

     

只有在使用Swift编写类时才会出现这种情况。 (就是它   修正假设)?

这不正确。当您说"使用可选工作流来验证方法是否存在"时,我假设您在调用"无法识别的选择器和可选链接&中描述的类型AnyObject上的方法时会发生什么#34;在" id Compatibility"使用Swift with Cocoa和Objective-C指南中的一节。

此功能适用于Objective-C(@objc)方法。 AnyObject允许您仅动态访问Objective-C(@objc)方法。

  

您可以调用任何Objective-C方法并访问任何属性   AnyObject值而不转换为更具体的类类型。这个   包括Objective-C兼容的方法和标有的属性   @objc属性。

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