1

我正在尝试使新的 Swift 版本的库源代码与旧的 Objective-C 版本的库兼容。

我知道如果一个 Objective-C 便利初始化器和 Objective-C 工厂构造器都采用相同的参数,那么只有其中一个被导入到 Swift API 中。例如:

+ (instancetype)fooWithBar:(NSString *)bar; // and
- (instancetype)initWithBar:(NSString *)bar;

都导入为Foo(bar: String),并且通过某些标准,其中一个是选择的(我认为遇到的第一个)。

但是,反过来说,@objc convenience init(bar: String)Objective-C 仅作为initWithBar:(NSString *)bar.

我的遗留 API 只有工厂构造函数,所以我需要公开它。我想出的最接近的是@objc static func foo(bar: String) -> Foo. 这似乎有效。

我对这种方法有两个担忧:

  1. 关于 Objective-C 到 Swift 的桥接是不对称的
  2. 它返回一个拥有的引用,其中 Objective-C 工厂构造函数的约定是返回一个自动释放的引用。

静态函数在这里是正确的方法吗?

4

0 回答 0