在我的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:次要:修正:')
答案 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提出雷达?