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

150 天前
 brader
现在有个 IOS 客户端用 object-c 语言开发的。

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

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

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

emmm....可能在我同事眼里我已经被打上了难说话的后端的标签。。。
1050 次点击
所在节点    程序员
14 条回复
liuidetmks
150 天前
不要争论,
老字段和新字段都给他返回 ,make him happy 。
NessajCN
150 天前
不用理他
kim0927
150 天前
这个一般都是客户端兼容吧
A1aM0
150 天前
各端各有命名规则,后端一对多怎么能全部兼顾到啊,自己映射一下就好了,框架那么多一共多写不了几行

反正我就这么干的
yvanww
150 天前
id 确实是 oc 的关键字,但是确实映射一下就行了,麻烦点而已; ps:我也不喜欢后端用 id 作为参数返回
xiangyuecn
150 天前
你们是不是都对关键字有什么误解,换做早些年,这个搞 iOS 的肯定要被我毒打一顿🐶
bigscotaleha
150 天前
没什么影响,只是 xcode 会把那个 id 的属性,标记为和关键字一样的主题色,就是看着挺烦。。。就算不映射也没关系。。。
icubic
150 天前
作为一个 iOS 开发,真的没见过因为这种理由反过来让后端改字段的。。iOS 要做这个的映射也就没几行代码。。这都不肯改的吗
hongfengkt
150 天前
现在已经不需要映射了,早几年需要
Leonard
150 天前
确实是 OC 关键字,但是都是可以处理的,也不是很麻烦。他还特地来找你说,很可能是他自己不会处理🐶
lx271896700133
150 天前
你跟他说,2023 年了,还不学 swift ,太 Out 了
HojiOShi
150 天前
虽然我不是开发 iOS 的,但是转换字符串的方法这么简单都不能实现,这个客户端开发也是菜得抠脚。
chenjiangui998
150 天前
客户端一行代码的事情, 在类中实现个 keyMap 的方法 return 一个字典映射就行
nenseso
149 天前
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 他在找这个?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/999433

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX