从 Objective C 调用 Swift,关闭到阻塞?

Calling Swift from Objective C, closure to block?

我开始将 Objective c 项目转换为 Swift。 我要转换的第一件事是网络层。 我正在尝试以一种可以从 objective c.

调用的方式在 Swift 中编写我的网络层

问题出在我的 swift 代码中,我正在将闭包传递给一个方法。它在 Swift 中工作,但在生成 header 文件时似乎并不像它为任何使用闭包的方法生成方法定义?

是否有解决此问题的方法,或者我可以使用采用 closure/block 的 swift 方法的任何方式?

Swift class

@objc public class UserNetworkManager: BaseNetworkManager {

   // I can call this from objective c
   public func fetchSomething() {

   }

   // I can't call this from objective c
   public func fetchFriends(userId: String, completion: ([User]?, NSError?)->()) -> Request {

   }

}

生成Header

SWIFT_CLASS("_TtC12Company19UserNetworkManager")
@interface UserNetworkManager : BaseNetworkManager
- (void)fetchSomething;
@end

只要所涉及的每种类型都可以转换为 Objective-C,将闭包转换为块应该没有任何问题。在这种情况下,您可能没有将您的用户和请求 类 标记为 @objc,这将阻止生成此方法。

要在 Swift 中实例化一个 Objective-C class,您可以使用 Swift 初始化器语法调用其初始化器之一。

Objective-C 初始化器以 initinitWith 开头:如果初始化器采用一个或多个参数。当 Objective-C 初始化器被 Swift 导入时,init 前缀成为一个 init 关键字,表明该方法是一个 Swift 初始化器。如果初始化器接受一个参数,则删除 With 并将选择器的其余部分相应地分成命名参数。