Swift不符合采用Objective C Protocol的协议错误

时间:2015-11-16 04:37:36

标签: objective-c swift protocols

在我的swift代码中尝试采用objective-c协议时,我一直收到“类型不符合协议”的错误。我正在实现所有必需的方法,但编译器为每个方法都给出了错误。

Objective-C文件中的协议声明是

@protocol RBLProtocolDelegate
-(void) protocolDidReceiveCustomData:(uint8_t *) data length:(uint8_t) length;
-(void) protocolDidReceiveProtocolVersion:(UInt8) major Minor:(UInt8) minor Bugfix:(UInt8) bugfix;
-(void) protocolDidReceiveTotalPinCount:(uint8_t) count;
-(void) protocolDidReceivePinCapability:(uint8_t) pin Value:(uint8_t) value;
-(void) protocolDidReceivePinMode:(uint8_t) pin Mode:(uint8_t) mode; /* mode: I/O/Analog/PWM/Servo */

-(void) protocolDidReceivePinData:(uint8_t) pin Mode:(uint8_t) mode Value:(uint8_t) value;
@end

在我的swift文件中(这只是其中一种方法,我已经实现了所有其他方法,但我只是为了简洁而展示一种方法)

 @objc func protocolDidReceiveProtocolVersion(major: UInt8, minor: UInt8, bugfix: UInt8) {

}

产生编译器错误:

  

Objective-C方法'protocolDidReceiveProtocolVersion:minor:bugfix:'   方法提供   'protocolDidReceiveProtocolVersion(_:minor:bugfix :)'不匹配   需求的选择器   ( 'protocolDidReceiveProtocolVersion:次要:修正:')

Screenshot of issue in xcode

1 个答案:

答案 0 :(得分:2)

看起来你有一个区分大小写的问题。您的协议声明

protocolDidReceiveProtocolVersion:Minor:Bugfix:

你正在实施:

protocolDidReceiveProtocolVersion:minor:bugfix:

注意小写' m'和' b'在你的版本中。

编辑:实际上看起来Xcode在Swift中错误地自动完成了协议实现。我可以让它表现的唯一方法是修改Objective-C协议定义以使用小写的“M' M'和' B'对于那些参数名称。

即使是琐碎的测试Objective-C协议:

@protocol FooProtocol
- (void)foo:(NSInteger)foo Bar:(NSInteger)bar;
@end

由于大写' B'似乎无法在Swift中实现。在' Bar'。我还没有通过协议阅读这种行为,这似乎是一个重大的疏忽。或许可以向Apple提出雷达?