Skip to content

方法签名对照表

刘全有 edited this page Apr 17, 2020 · 2 revisions

新增Oc方法手动设置签名

使用dynamic关键字 TTPatch动态添加的方法分两类

  1. 仅供JS端调用,此种方法因供JS端调用,所以采用普通方式声明即可.

  2. 供JS&Oc调用,此种访问因Native调用所以需要提供动态方法签名,写法如下

    方法名 关键字 返回值,参数 方法实现

    funcName:dynamic("void, int", function(){})

    如方法只有一个参数/返回值(id类型)可简化:dynamic(function(){}),也可以不写dynamic.

    Native动态方法签名默认: `v@:v'/无参数,无返回值

// OC
@implementation JPTableViewController
- (void)viewDidLoad
{
    [self funcWithParams:@"悟空"];
    [self funcWithParams:@"熊大" param2:@"熊二"];
    [self funcWithParams:@"百度" param2:@"腾讯" param3:@"阿里"];
}
@end
// JS

defineClass("JPTableViewController", {
 	funcWithParams_:dynamic('void,id',function(param1){
		Utils.log_info('[1]动态方法入参:'+param1);
	}),
	funcWithParams_param2_:dynamic('void,id,id',function(param1,param2){
		Utils.log_info('[2]动态方法入参:'+param1+','+param2);
	}),
	funcWithParams_param2_param3_:dynamic('void,id,id,id',function(param1,param2,param3){
		Utils.log_info('[3]动态方法入参:'+param1+','+param2+','+param3);
	}),
})

BLOCK方法签名

1.调用Oc传入JS block

使用block('void,void')关键字 自动获取block签名

callBlock_:dynamic(',?',function(callback){
    if(callback){
        //自动获取签名
        callback(10);
    })
},

手动设置block签名

webView_decidePolicyForNavigationAction_decisionHandler_:dynamic(',id,id,?',function(webView, navigationAction, 
decisionHandler) {
    //手动设置签名
    decisionHandler(block(',int'),1);
}),

关于方法签名

Obj-C类型 符号
NSString*,NSNumber*,NSObjec*... id
Block ?
CGFloat CGFloat
CGSize CGSize
CGRect CGRect
CGPoint CGPoint
CGVector CGVector
Class Class
SEL SEL
void* void*
BOOL BOOL
int int
void void
char char
short short
unsigned short unsigned short
unsigned int unsigned int
long long
float float
size_t size_t
Clone this wiki locally