使用 Swift 中的块调用 Objective C 方法



我正在使用他们的MatrixKit框架将Matrix消息传递到我的iOS应用程序中,我通过Cocoapods将其添加到我的项目中。除了最后一个问题外,我一切都可以正常工作:我的 Swift 文件中无法识别提供的方法之一。MXSession.h 文件列出了一种方法:

- (void)start:(void (^)(void))onServerSyncDone
failure:(void (^)(NSError *error))failure NS_REFINED_FOR_SWIFT;

用于启动 MXSession。 我需要从我的 Swift 类调用此方法,我试图遵循无济于事:

session.start({
//success 
}, failure: {
//failure   
})

编译器抱怨说,当它显然这样做时Value of type 'MXSession' has no member 'start'。 另外,奇怪的是,我能够在MXSession中访问其他方法,例如:

- (void)resume:(void (^)(void))resumeDone;

以下:

session.resume {
//resumed successfully
}

完美工作。 我对 swift 中的闭包不太满意,我只是犯了语法错误吗? 我已经尝试了一切,但似乎无法使其工作。

好吧,当然,我在发布这个问题的那一刻就解决了它。 显然,NS_REFINED_FOR_SWIFT宏在方法的开头附加了两个下划线,以便在 swift 中使用。 以下代码编译:

session.__start({
//success
}, failure: { error in
//failure
})

最新更新