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

时间:2015-01-02 20:55:19

标签: ios objective-c swift

我开始将Objective c项目转换为Swift。 我要转换的第一件事是网络层。 我试图以一种可以从目标c调用的方式在Swift中编写我的网络层。

问题在于我的快速代码我将闭包传递给方法。它适用于Swift,但在生成头文件时似乎不会为使用闭包的任何方法生成方法定义?

是否有针对此的解决方法,或者我可以使用带有闭包/块的swift方法的任何方法?

Swift课程

@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 {

   }

}

生成标题

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

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:-1)

要在Swift中实例化Objective-C类,可以使用Swift初始化语法调用其初始化程序之一。

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