我开始将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
答案 0 :(得分:5)
只要涉及的每种类型都可以转换为Objective-C,就不应该将闭包转换为块。在这种情况下,您可能没有将用户和请求类标记为@objc
,这会阻止生成此方法。
答案 1 :(得分:-1)
要在Swift中实例化Objective-C类,可以使用Swift初始化语法调用其初始化程序之一。
Objective-C初始值设定项以 init 或 initWith 开头:如果初始化程序采用一个或多个参数。当Swift导入Objective-C初始化程序时, init 前缀成为init关键字,表示该方法是Swift初始化程序。如果初始化程序接受一个参数,则删除With,并将选择器的其余部分相应地分成命名参数。