我在 Objective-C 中定义了一个类,它的初始化程序是-initWithError:
(初始化程序可能由于对外部资源的依赖而失败)。我希望它以init() throws
. 从 NSObject 继承的常规初始化程序-init
,可以标记为不可用,因为我不想使用它。
在 Objective-C 中,我有:
@interface Foo : NSObject
- (instancetype _Nullable)initWithError:(NSError **)error;
@end
当然,这在 Objective-C 中运行良好。
在 Swift 中,-initWithError
被桥接为init(error: ()) throws
. 这可能是因为withError:
从方法名称中删除会导致init()
与继承的普通-init
初始化程序发生冲突。这可以像这样从 Swift 调用:
let foo = try Foo(error: ())
这看起来很奇怪,因为错误参数是无效的。如果将其导入为init() throws
. 显而易见的解决方案是在 Objective-C 标头中标记-init
using 。NS_UNAVAILABLE
不幸的是,这不起作用。-initWithError:
仍然被桥接为init(error: ())
,并且尝试调用try Foo()
会导致编译器错误,指出init()
在 Swift 中不可用。
有没有更优雅的解决方案,这样try init()
才有效?