ios – 与_cmd相当的swift是什么?

我想获取当前的方法名称,使用类似于这一个格式的消息
[NSExeception raise:NSInternalInconsistencyException format:@"You must override %@ in a subclass",NsstringFromSelector(_cmd)]

另外,我想使用_cmd设置关联对象.我很感激任何想法

解决方法

没有Swift等价于_cmd. Swift没有什么理由使用它.

在Objective-C中考虑_cmd.什么时候有用?大多数情况下,_cmd的值与代码所在的方法名称相同,因此在编译时已经知道,并且不需要运行时值.以下是在_cmd在Objective-C中有用的一些可能的情况:

>在宏.宏在代码中被扩展,所以如果_cmd出现在宏中,那么它被插入到使用它的源中,因此方法名可以在宏中使用.但是,Swift中并不存在这样的宏.加上宏是编译时,所以像__FUNCTION__这样的编译时机制也可以工作.>您可以定义一个使用self和_cmd的C函数,并使用它(与同一个函数)作为多个方法的实现,通过使用class_addMethod和class_replaceMethod添加它,函数中的_cmd将有助于区分不同的方法调用.但是,Class_addMethod和class_replaceMethod在Swift中不可用.>方法swizzling也是一个混合实现方法的过程.由于在swizzling中交换两种方法的实现,_cmd将帮助揭示在调用中使用的实际方法名称,这可能与源代码代码方法不匹配,因为实现被交换.我猜Swift中的方法swizzling仍然是可能的,因为在Swift中仍然可以使用method_exchangeImplementations.但是在方法swizzling中,您交换的方法是针对与其进行交换的方法量身定做的,因此如果被调用,那么调用哪个方法名称就没有歧义.>在您手动获取方法的IMP(实现功能)的情况下,并使用其他选择器手动调用它.在这种情况下,函数内部可以看到_cmd中的不同选择器.但是,您不必担心Swift中的这一点,因为获取IMP的方法不可用.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...