-
Notifications
You must be signed in to change notification settings - Fork 2.2k
添加对CLLocationCoordinate2D 等结构,以及成员变量为结构的结构支持。
从OC传给JS时,需要修改JPForwardInvocation 的几处代码。
- 从OC调JS的参数转换时的处理。(JPForwardInvocation)*
for (NSUInteger i = 2; i < numberOfArguments; i++) { ... case '{': { //转换结构类型的参数给JS。 }
-
计算结构体大小。 添加 sizeOfStructTypes2 方法,传入 作为成员变量的结构体名称,递归去查询,最后返回整个结构体的大小。 比如 StructA有两个double,StructB有两个double; 而StructC由一个StructA和一个StructB组成,那么大小为 32.
-
将bytes转为NSDictionary。 getDictOfStruct 方法重写,添加 case '?': 的处理。
-
从JS调OC的参数转换时的处理。(callSelector) for (NSUInteger i = 2; i < numberOfArguments; i++) { ... case '{': { //针对部分Struct 如CLLocationCoordinate2D ,argumentType是 ?=dd, 根本无法知道结构类型,那么通过 “dd” type去自定义的Struct里搜索有相同的“types”字段的Struct,当做这个结构来处理。由于转换放入bytes里时只跟type有关,跟key的名称无关,因此不会有问题。 }
-
将Dictionary转换存入bytes。 getStructDataWithDict 方法添加 case '?': 的处理。
对于CLLocationCoordinate2D 这类结构,直接在JS脚本里定义即可,如:
require('JPEngine').defineStruct({ "name": "CLLocationCoordinate2D", "types": "dd", "keys": ["latitude", "longitude"] });
对于带有结构类型成员的结构体,定义如下:
require('JPEngine').defineStruct({ "name": "TestA", "types": "dd", "keys": ["a", "b"] });
require('JPEngine').defineStruct({ "name": "TestB", "types": "dd", "keys": ["c", "d"] });
require('JPEngine').defineStruct({ "name": "TestS", "types": "??", "keys": ["aa", "bb"], "sub" :"TestA,TestB" });