这是 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;
问题来了:
1
dorentus 2016-04-27 19:17:38 +08:00 via iPhone
你那个 objc 的方法命名不规范…
要改的话,直接把 Device: 改成 device: 不就好了,又不是 C++ clang 或许有什么属性标记支持自定义导给 swift 的名字的,我不知道 |
3
wanganjun 2016-04-27 22:15:26 +08:00 1
-(void)didReceiveData:(NSData*)data Device:(NSObject*)dev NS_SWIFT_NAME(didReceiveData(_:Device:));
|
4
wohenyingyu01 2016-04-28 00:28:31 +08:00
OC 本身就应该小写开头,写成 device
|
5
skyline75489 2016-04-28 08:03:21 +08:00
楼上 +1 ,大写是不规范的。要么就用楼上上的方法,自己写 NS_SWIFT_NAME 。
|
6
skyline75489 2016-04-28 08:04:54 +08:00 1
Objective-C 代码再往 Swift 转的时候用的是一个专门的 importer ,这个 importer 看来也是喜欢规范的命名,对于不规范的就改掉了。
|