Swift class 实现 Objective-C 写的 protocol 的小坑

2016-04-27 18:50:59 +08:00
 IvanLing

这是 Objective-C Protocol 里面的出问题的函数

-(void)didReceiveData:(NSData*)data Device:(DFBlunoDevice*)dev;

用 Swift 实现的时候, Xcode 会自动将参数转为小写

func didReceiveData(data: NSData!, device dev: DFBlunoDevice!) {  }

然后 Xcode 就会报错, 提示我 class 不 conform 那个 Protocol 。如果强行将 swift 函数的 device 写成 Device, Xcode 依旧是报错,要求我改成小写。

最后我的解决方案是直接将 Objective-C 的函数改写成这样

 -(void)didReceiveData:(NSData*)data mDevice:(DFBlunoDevice*)dev;

问题来了:

2735 次点击
所在节点    iDev
6 条回复
dorentus
2016-04-27 19:17:38 +08:00
你那个 objc 的方法命名不规范…

要改的话,直接把 Device: 改成 device: 不就好了,又不是 C++

clang 或许有什么属性标记支持自定义导给 swift 的名字的,我不知道
IvanLing
2016-04-27 19:23:11 +08:00
@dorentus 那个是硬件提供的 library...
wanganjun
2016-04-27 22:15:26 +08:00
-(void)didReceiveData:(NSData*)data Device:(NSObject*)dev NS_SWIFT_NAME(didReceiveData(_:Device:));
wohenyingyu01
2016-04-28 00:28:31 +08:00
OC 本身就应该小写开头,写成 device
skyline75489
2016-04-28 08:03:21 +08:00
楼上 +1 ,大写是不规范的。要么就用楼上上的方法,自己写 NS_SWIFT_NAME 。
skyline75489
2016-04-28 08:04:54 +08:00
Objective-C 代码再往 Swift 转的时候用的是一个专门的 importer ,这个 importer 看来也是喜欢规范的命名,对于不规范的就改掉了。

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

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

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

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

© 2021 V2EX