V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
brader
V2EX  ›  程序员

IOS 开发 object-c 中关键字的问题

  •  
  •   brader · 2023-12-11 16:49:55 +08:00 · 1295 次点击
    这是一个创建于 381 天前的主题,其中的信息可能已经有所发展或是发生改变。
    现在有个 IOS 客户端用 object-c 语言开发的。

    我是服务端,有些接口响应字段有 id 、description 、class 等等这些词吧,然后客户端老想找我换个词。。。说这个词是他们的关键字,他们不方便用,老接口很多历史项目在用的,我不太愿意换,我建议客户端尽量自己本地做好关键字映射,以后我新加的接口尽量不用这几个词( id 我还会用)。

    我不肯换主要是觉得按规范提供的接口字段,没问题,然后我服务端会面对 ios 、android 、h5 等等客户端,你不可能让我去拿着所有这些客户端的关键字列表对照着来起名吧?

    询问了其他后端,还有我以前几年的对接经验来说,似乎很少客户端对这个响应字段关键字问题感到棘手的。

    emmm....可能在我同事眼里我已经被打上了难说话的后端的标签。。。
    14 条回复    2023-12-12 08:59:33 +08:00
    liuidetmks
        1
    liuidetmks  
       2023-12-11 16:55:45 +08:00
    不要争论,
    老字段和新字段都给他返回 ,make him happy 。
    NessajCN
        2
    NessajCN  
       2023-12-11 16:55:48 +08:00
    不用理他
    kim0927
        3
    kim0927  
       2023-12-11 16:55:59 +08:00
    这个一般都是客户端兼容吧
    A1aM0
        4
    A1aM0  
       2023-12-11 17:19:36 +08:00
    各端各有命名规则,后端一对多怎么能全部兼顾到啊,自己映射一下就好了,框架那么多一共多写不了几行

    反正我就这么干的
    yvanww
        5
    yvanww  
       2023-12-11 17:25:25 +08:00
    id 确实是 oc 的关键字,但是确实映射一下就行了,麻烦点而已; ps:我也不喜欢后端用 id 作为参数返回
    xiangyuecn
        6
    xiangyuecn  
       2023-12-11 17:36:00 +08:00
    你们是不是都对关键字有什么误解,换做早些年,这个搞 iOS 的肯定要被我毒打一顿🐶
    bigscotaleha
        7
    bigscotaleha  
       2023-12-11 17:41:48 +08:00
    没什么影响,只是 xcode 会把那个 id 的属性,标记为和关键字一样的主题色,就是看着挺烦。。。就算不映射也没关系。。。
    icubic
        8
    icubic  
       2023-12-11 17:43:30 +08:00
    作为一个 iOS 开发,真的没见过因为这种理由反过来让后端改字段的。。iOS 要做这个的映射也就没几行代码。。这都不肯改的吗
    hongfengkt
        9
    hongfengkt  
       2023-12-11 17:45:12 +08:00
    现在已经不需要映射了,早几年需要
    Leonard
        10
    Leonard  
       2023-12-11 17:45:37 +08:00
    确实是 OC 关键字,但是都是可以处理的,也不是很麻烦。他还特地来找你说,很可能是他自己不会处理🐶
    lx271896700133
        11
    lx271896700133  
       2023-12-11 17:47:07 +08:00
    你跟他说,2023 年了,还不学 swift ,太 Out 了
    HojiOShi
        12
    HojiOShi  
       2023-12-11 17:48:40 +08:00
    虽然我不是开发 iOS 的,但是转换字符串的方法这么简单都不能实现,这个客户端开发也是菜得抠脚。
    chenjiangui998
        13
    chenjiangui998  
       2023-12-11 21:06:07 +08:00
    客户端一行代码的事情, 在类中实现个 keyMap 的方法 return 一个字典映射就行
    nenseso
        14
    nenseso  
       2023-12-12 08:59:33 +08:00
    https://github.com/CoderMJLee/MJExtension?tab=readme-ov-file#-model-name---json-key-mapping%E6%A8%A1%E5%9E%8B%E4%B8%AD%E7%9A%84%E5%B1%9E%E6%80%A7%E5%90%8D%E5%92%8C%E5%AD%97%E5%85%B8%E4%B8%AD%E7%9A%84key%E4%B8%8D%E7%9B%B8%E5%90%8C%E6%88%96%E8%80%85%E9%9C%80%E8%A6%81%E5%A4%9A%E7%BA%A7%E6%98%A0%E5%B0%84
    ```
    @interface Bag : NSObject
    @property (copy, nonatomic) NSString *name;
    @property (assign, nonatomic) double price;
    @end

    @interface Student : NSObject
    @property (copy, nonatomic) NSString *ID;
    @property (copy, nonatomic) NSString *desc;
    @property (copy, nonatomic) NSString *nowName;
    @property (copy, nonatomic) NSString *oldName;
    @property (copy, nonatomic) NSString *nameChangedTime;
    @property (strong, nonatomic) Bag *bag;
    @end

    /***********************************************/

    // How to map
    [Student mj_setupReplacedKeyFromPropertyName:^NSDictionary *{
    return @{
    @"ID" : @"id",
    @"desc" : @"description",
    @"oldName" : @"name.oldName",
    @"nowName" : @"name.newName",
    @"nameChangedTime" : @"name.info[1].nameChangedTime",
    @"bag" : @"other.bag"
    };
    }];
    // Equals: Student.m implements +mj_replacedKeyFromPropertyName method.

    NSDictionary *dict = @{
    @"id" : @"20",
    @"description" : @"kids",
    @"name" : @{
    @"newName" : @"lufy",
    @"oldName" : @"kitty",
    @"info" : @[
    @"test-data",
    @{
    @"nameChangedTime" : @"2013-08"
    }
    ]
    },
    @"other" : @{
    @"bag" : @{
    @"name" : @"a red bag",
    @"price" : @100.7
    }
    }
    };

    // JSON -> Student
    Student *stu = [Student mj_objectWithKeyValues:dict];

    // Printing
    NSLog(@"ID=%@, desc=%@, oldName=%@, nowName=%@, nameChangedTime=%@",
    stu.ID, stu.desc, stu.oldName, stu.nowName, stu.nameChangedTime);
    // ID=20, desc=kids, oldName=kitty, nowName=lufy, nameChangedTime=2013-08
    NSLog(@"bagName=%@, bagPrice=%f", stu.bag.name, stu.bag.price);
    // bagName=a red bag, bagPrice=100.700000
    ```
    I guess 他在找这个?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1019 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 21:04 · PVG 05:04 · LAX 13:04 · JFK 16:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.