好的,这是一个大问题。我有一个用ObjC编写的库(这里),其中我们定义了一个协议。当我尝试在Swift文件中使用它时,我不断地遇到以下错误信息:
然后创建一个ObjC头文件(我称之为StupidProtocol.h),里面包含以下协议(请注意每个名称和值都要与给定的完全匹配,包括大小写):
“由于参数名称与协议所需的不同”错误
'
为了简化事情,我做了一个测试项目 - 它应该被创建为Swift项目。类型“XXX”不符合协议“XXX”
然后创建一个ObjC头文件(我称之为StupidProtocol.h),里面包含以下协议(请注意每个名称和值都要与给定的完全匹配,包括大小写):
@protocol MyProtocol <NSObject>
- (NSString *)getAxisLabel:(id)axis Value:(CGFloat)value;
@end
在桥接头文件中:
#import "StupidProtocol.h"
然后回到Swift文件中:
class ViewController: UIViewController, MyProtocol
{
func getAxisLabel(axis: AnyObject!, value: CGFloat) -> String! {
return ""
}
}
即使自动完成为我完成了getAxisLabel函数,我们仍然遇到了这个错误。我强烈怀疑问题在于参数"value"和它的函数参数"Value"。
非常感谢任何帮助。
编辑
请注意,这个库并不是我的技术产物,所以我无法更改它。我需要一种在Swift中使用它而不改变它原始声明的方式。我的例子只是为了简化我的问题。
我尝试过以下场景但没有成功:
“具有与协议要求的参数名称不同的参数名称”错误
func getAxisLabel(axis: AnyObject!, Value value: CGFloat) -> String! {
return ""
}
“由于参数名称与协议所需的不同”错误
func getAxisLabel(axis: AnyObject!, Value: CGFloat) -> String! {
return ""
}
'
'类型不符合协议'
'func getAxisLabel(axis: AnyObject!, Value: CGFloat) -> NSString! {
return ""
}
解决方案
请查看被采纳的答案