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

ios – 与_cmd相当的swift是什么?,第1张

概述我想获取当前的方法名称,使用类似于这一个格式的消息 [NSExeception raise:NSInternalInconsistencyException format:@"You must override %@ in a subclass", NSStringFromSelector(_cmd)] 另外,我想使用_cmd设置关联对象.我很感激任何想法 没有Swift等价于_cmd. Swif 我想获取当前的方法名称,使用类似于这一个格式的消息
[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是什么?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1111827.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存