我在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()
与继承的平原相冲突
-初始化
初始值设定项。这可以从Swift调用,如下所示:
let foo = try Foo(error: ())
这看起来很奇怪,因为error参数是void。如果将其作为
init()抛出
。显而易见的解决办法是
-初始化
使用
NS_UNAVAILABLE
在Objective-C标题中。不幸的是,这不起作用。
-初始错误:
仍然被桥接为
init(error: ())
,并尝试呼叫
try Foo()
导致编译器错误,表示
初始化()
在Swift中不可用。
有没有更优雅的解决方案
try init()
只是工作?