美文网首页
如何通过反射传入基本数据类型参数

如何通过反射传入基本数据类型参数

作者: 咚咚嗒大人 | 来源:发表于2023-06-13 12:01 被阅读0次

如何通过反射传入基本数据类型参数?

- (id)performSelector:(SEL)aSelector withObject:(id)object1 withObject:(id)object2;
NSNumber *appID = @(100);
Class class = NSClassFromString(@"xxx");
[class performSelector:NSSelectorFromString(@"类方法") withObject:appID];

直接使用上面的performSelector的方式是走不通的,可以使用NSInvocation。

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
//checkInputValueEqual:withError:  验证两次输入内容是否一致
            SEL mysel = NSSelectorFromString(@"checkInputValueEqual:withError:");
            if ([codeView2 respondsToSelector:mysel]) {
                NSInteger comparErrorCode = 0;
//                1、方法签名
                NSMethodSignature* signature = [codeView2 methodSignatureForSelector:mysel];
                const char* retType = [signature methodReturnType];
                if (strcmp(retType, @encode(BOOL)) == 0) {
                    //包装方法
                    NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
                    //方法调用者
                    invocation.target = codeView2;
                        //要调用的方法和方法签名中的方法一样
                    invocation.selector = mysel;
                    //设置传递的参数 0 代表target 1代表 selector 所以从2开始
                    [invocation setArgument:&firstTextField atIndex:2];
                    [invocation setArgument:&comparErrorCode atIndex:3];
                    //执行方法
                    [invocation invoke];
                    //获取返回值
                    BOOL result = 0;
                    [invocation getReturnValue:&result];
                    
                    if (result) {
                        if (weakself.closeBlock) {
                            weakself.closeBlock(encryptedData2, clientRandomEncryptedData2,weakself.param.strServerRandom2);
                        }
                    }else {
                        [weakself reloadCodeView:@"密码输入不一致,请重新输入!"];
                    }
                }
            }
#pragma clang diagnostic pop

相关文章

  • Mybatis传入参数

    基本数据类型:包含int,String,Date等。基本数据类型作为传参,只能传入一个。通过#{参数名}即可获取传...

  • 6.1模板

    数据类型也可以通过参数来传递,在函数定义时可以不指明具体的数据类型,当发生函数调用时,编译器可以根据传入的参数自动...

  • Java 反射 静态变量 静态方法 静态成员 调用 获取修饰符

    当使用Java反射机制操作类成员时,传入对象的参数改成传入null 参考 jenkov

  • SpringMVC(二)Request Data

    本章介绍后台如何接受前台传入的参数(普通传参,RESTFUL路径传参数) url参数 通过@RequestPara...

  • Java反射理解(五)-- 方法反射的基本操作

    Java反射理解(五)-- 方法反射的基本操作 方法的反射 1. 如何获取某个方法 方法的名称和方法的参数列表才能...

  • MyBaits——SQL映射文件中'#{}'与'${}'的区别

    #{}、${} #{参数}:占位符; 参数类型: 1)、可以接受任意的基本数据类型; 注、当参数为基本数据数据类型...

  • Java基础之反射

    Java基础之反射 反射基本介绍 反射的使用通过反射调用属性和方法通过反射获取配置文件 反射基本介绍 Java反射...

  • 注解@annotation

    注解如何生效 传入字节码对象,通过反射获取类, 字段, 方法上的注解对象 通过注解对象获取注解上的值 Car In...

  • 一文读懂系列-Java反射

    如何使用反射 在开发过程中我们经常会使用到反射,反射使用起来也很简单,在java runtime下通过方法名和参数...

  • 【Java】元组

    一、问题什么是元组,如何传入不限制参数的个数,如何返回静态方法; 二、代码1.如何传入多个参数; 2.元组 三、总...

网友评论

      本文标题:如何通过反射传入基本数据类型参数

      本文链接:https://www.haomeiwen.com/subject/yascydtx.html