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