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

SwiftIvanLing • 于 2016-04-28 02:41:29 +0800 • 最后由 cgwangding2016-05-10 19:10:09 +0800 3267 阅读

这是 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;

问题来了:

  • Swift 函数参数一定要以小写字母开头么?
  • 有比更改Objective-C源代码更优的解决方法吗?
回复: 3
  • iBcker 2016-04-28 21:26:49 +0800

    我来答题了 1.Swift的函数是可以大写开头的 2.没想到~

  • dugege 2016-04-28 21:30:17 +0800

    Objective-C源码加个@optional,不过也算修改源码了···so,我也没想到···算不算个bug?

    but,问题来了:为啥要大写开头,本身就很诡异吧···

  • cgwangding 2016-05-10 19:10:09 +0800

    是地,为嘛要大写开头,命名规范应该要求是小写吧

  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,见 Emoji cheat sheet
  • @name 会链接到用户页面,并会通知他
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
Ctrl+Enter