Ios 使用';初始化();

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

我使用的是在objective c上实现的第三方库。我必须在swift中开发应用程序

我必须使用的库代码是“初始化”

@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)()