wendux / DSBridge-IOS

:earth_asia: A modern cross-platform JavaScript bridge, through which you can invoke each other's functions synchronously or asynchronously between JavaScript and native.
1.96k stars 305 forks source link

更新到3.0.3后,swift调不到api的方法了,怎么回事? #61

Closed ashen-zhao closed 6 years ago

ashen-zhao commented 6 years ago

看了下好像是 WKUserScript *script = [[WKUserScript alloc] initWithSource:@"_dswk='_dsbridge=';" injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:YES]; 这里的"_dswk='_dsbridge='; 改变了,不知道这是什么意思

wendux commented 6 years ago

@ashen-zhao 你之前用的是哪个版本?2.x和3.x是不兼容的,可以查看文档。

:octocat: From gitme Android

ashen-zhao commented 6 years ago

@wendux 我之前用的3.0.2,我刚才又换回去了,就可以调通了,3.0.3调起时,提示找不到方法

wendux commented 6 years ago

@ashen-zhao 所有方法都调用不了还是个别?今天改的是jsbutil.m 里的methodByNameArg方法,你能帮在3.0.3中这个方法里下个断点,看看是不是在查找swift方法时哪里的错误? 多谢😁

:octocat: From gitme Android

ashen-zhao commented 6 years ago

@wendux 那好的, 我试试看

ashen-zhao commented 6 years ago

@wendux 经过调试,我发现swift的方法中,外部参数名要用‘ ’来忽略掉,才可以调通,否则methodByNameArg这个方法中,会将参数名追加到方法名后面,导致方法名字不匹配,找不到方法; 比如这样: @objc func testSyn( arg:String) -> String { return String(format:"%@[sync call:%@]", arg, "test") }

wendux commented 6 years ago

已在文档中说明:https://github.com/wendux/DSBridge-IOS/blob/master/readme-chs.md#%E5%9C%A8swift%E4%B8%AD%E4%BD%BF%E7%94%A8