没有与的Swift等效项
_cmd。没有理由在Swift中使用它。
_cmd在Objective-
C中考虑。什么时候有用?大多数情况下,的值
_cmd将与代码所在的方法的名称相同,因此在编译时就已知道该值,并且不需要运行时值。以下是一些可能
_cmd在Objective-
C中有用的情况:
- 在宏中。该宏在代码中展开,因此,如果
_cmd
出现在宏中,则将其插入使用它的源中,因此可以在宏内部使用方法名称。但是,这样的宏在Swift中不存在。Plus宏是编译时的,因此类似的编译时机制__FUNCTION__
也可以类似地工作。 - 您可以定义一个采用
self
和的C函数_cmd
,并将其(与同一方法一起使用)作为多种方法的实现,方法是使用class_addMethod
和将其添加到函数中class_replaceMethod
,_cmd
该函数内部将有助于区分不同的方法调用。但是,class_addMethod
并且class_replaceMethod
在Swift中不可用。 - 方法混乱也是与方法实现混在一起的过程。由于在交换中交换了两个方法的实现,
_cmd
将有助于显示调用中使用的实际方法名称,这可能与源代码中代码所在的方法不匹配,因为实现被交换了。我猜方法在Swift中仍然可能出现混乱,因为在Swiftmethod_exchangeImplementations
中仍然可用。但是在方法混乱中,要交换的方法是针对与其交换的方法量身定制的,因此,如果调用了该方法,则不会混淆哪个方法的名称被调用。 - 如果您手动获取方法的
IMP
(实现函数),然后使用其他选择器手动调用它。在这种情况下,函数内部可以看到中的其他选择器_cmd
。但是,您不必担心在Swift中会因为获取的IMP
方法不可用而担心。



