您好,欢迎来到二三四教育网。
搜索
您的当前位置:首页把Android的java数据模型转换为Objective-C数

把Android的java数据模型转换为Objective-C数

来源:二三四教育网

的这几天公司项目在重构,以前Api的返回数据的数据模型是根据文档用GsonFormat自动生成的,方便是方便,但是有很多其实是同一个数据模型,但是自动生成的工具无法识别,最终导致我们的模型非常乱,有很多重复的Model类。
最后我们后端程序是Java写的,他们的数据模型其实丢给我们就能用,所以这次重构的时候就把数据模型和后端保持一致了,这就产生了一个问题,iOS的同学用的OC,还是要手写,重构代码 几百个model类,想想就忧伤啊。
所以为了建立我们Android开发同学和iOS开发同学的友谊,我们决定用java的类为我们iOS的同学生成他们要的模型。Let go!

思路

部分代码

下面是解析java模型中数据的类型,并且对应到oc当中的类型,可以根据自己的需求进行修改,比如我把double、float、long都是用oc的CGFloat处理了。

 /**
     * 解析type的信息并存储在map中,方便后面写入到oc文件
     *
     * @param type
     * @param container
     * @param fieldName
     * @return
     */
    private void saveTypeToMap(Class type, Map<String, String> container,
                               String fieldName, List<String> otherTypeList) {
        String ocType;
        //判断java类的类型,并且对应到oc的类型
        if (type == int.class || type == Integer.class) {
            ocType = "NSInteger";
        } else if (type == long.class || type == Long.class) {
            ocType = "CGFloat";
        } else if (type == boolean.class || type == Boolean.class) {
            ocType = "BOOL";
        } else if (type == double.class || type == Double.class) {
            ocType = "CGFloat";
        } else if (type == float.class || type == Float.class || type == BigDecimal.class) {
            ocType = "CGFloat";
        } else if (type == String.class || type == Date.class || type.isEnum()) {
            ocType = "NSString";
        } else if (type == List.class) {
            ocType = "NSArray";
        } else if (type == Object.class) {
            ocType = "NSDictionary";
        } else {
            //如果不是基础类型则为其他的自定义类型
            ocType = type.getName();
            int index = ocType.lastIndexOf(".");
            String typeName = classPrefix + ocType.substring(index + 1, ocType.length());
            ocType = typeName;
            if (!otherTypeList.contains(typeName)) {
                otherTypeList.add(typeName);
            }
        }
        //处理特殊字段,如果字段名称是id或者Category需要特殊处理 这里也可以根据自己的需要进行特别的映射处理
        if (fieldName.equals("id")) {
            container.put("Id", ocType);
        } else if (fieldName.equals("Category")) {
            container.put("HDCategory", ocType);
        } else if (fieldName.equals("Description")) {
            container.put("HDDescription", ocType);
        } else {
            container.put(fieldName, ocType);
        }
    }

使用的时候把OCTranslator类放倒自己的项目里任意位置,然后设置下下面的内容,指定一下java模型的包的路径,然后运行即可在项目根目录生成一个目录叫OCModelOutput的文件夹,里面就是生成好的OC模型了。


    //OC模型的前缀
    static String classPrefix = "GD";
    //公司名称 会显示到文件头部的Copyright信息中
    static String corporateName = "Shanghai HEADING Information Engineering Co., Ltd.";
    //显示到文件头部到元信息中
    static String schemeName = "TestProject";

    //指定java模型包的路径
    static String[] modelDirectories = new String[]{

    };

最后看看效果:

1234gif.gif

抛砖引玉,感兴趣的同学可以试试,说不定iOS开发是个妹子,这一步成功建立友谊之后,接下来怎么发展就看你啦。

Copyright © 2019- how234.cn 版权所有 赣ICP备2023008801号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务