我正在尝试使新的 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
. 这似乎有效。
我对这种方法有两个担忧:
- 关于 Objective-C 到 Swift 的桥接是不对称的
- 它返回一个拥有的引用,其中 Objective-C 工厂构造函数的约定是返回一个自动释放的引用。
静态函数在这里是正确的方法吗?