Ios 使用';初始化();
我使用的是在objective c上实现的第三方库。我必须在swift中开发应用程序 我必须使用的库代码是“初始化”Ios 使用';初始化();,ios,objective-c,swift,Ios,Objective C,Swift,我使用的是在objective c上实现的第三方库。我必须在swift中开发应用程序 我必须使用的库代码是“初始化” @interface VidyoClientConnector : NSObject {} +(BOOL) Initialize; +(BOOL) SetExperimentalOptions:(const char*)options; +(void) Uninitialize; @end 但是当使用上面的初始化方法时,我对 来自swift: Vidy
@interface VidyoClientConnector : NSObject
{}
+(BOOL) Initialize;
+(BOOL) SetExperimentalOptions:(const char*)options;
+(void) Uninitialize;
@end
但是当使用上面的初始化方法时,我对
来自swift:
VidyoClientConnector.initialize()
例外情况
ViewController.swift:17:9:initialize()的用法不明确
+[VidyoClientConnector Initialize]
及
作为initialize()
类方法导入到Swift,并且
造成歧义。重命名Objective-C方法将是
最好的选择(但可能不可能,因为它不是您的框架)
如果您有对标题的写入权限,则可以为Swift定义不同的名称:
+(BOOL) Initialize NS_SWIFT_NAME(vidyoInit());
然后可以用作
let result = VidyoClientConnector.vidyoInit()
如果不能修改头,那么可以实现包装器
Objective-C类别中的方法:
// .h file:
@interface VidyoClientConnector (Wrapper)
+(BOOL) vidyoInit;
@end
// .m file:
@implementation VidyoClientConnector (Wrapper)
+(BOOL) vidyoInit { return [self Initialize]; }
@end
最后,在这种特殊情况下,您可以使用这两种方法
具有不同的返回值,并使用
let result = (VidyoClientConnector.initialize as () -> Bool)()
不更改任何Objective-C代码。+(BOOL)Initialize
以大写字母开头(我承认这是不推荐的),但不以小写字母开头。与cap Xcode一起使用时,会给出以下结果:“Initialize()”已重命名为“Initialize()”,太棒了!谢谢@Martin
let result = (VidyoClientConnector.initialize as () -> Bool)()