[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的方法不可用.
总结以上是内存溢出为你收集整理的ios – 与_cmd相当的swift是什么?全部内容,希望文章能够帮你解决ios – 与_cmd相当的swift是什么?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)