如何将Objective-C initWithError:方法桥接到Swift

安德鲁·马德森

我在Objective-C中定义了一个类,该类的初始化程序是-initWithError:(初始化程序可能由于对外部资源的依赖而失败)。我希望这能桥接到Swift 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显而易见的解决方案是标记-init使用NS_UNAVAILABLE在Objective-C的头部。不幸的是,这行不通。-initWithError:仍然被桥接为init(error: ()),尝试调用会try Foo()导致编译器错误,指出init()在Swift中不可用。

有没有更优雅的解决方案,以便可以try init()正常工作?

罗布·纳皮尔

您可以使用来重命名该功能NS_SWIFT_NAME在这种情况下:

- (instancetype _Nullable)initWithError:(NSError **)error NS_SWIFT_NAME(init());

也就是说,这就像编译器错误一样。我建议打开一个缺陷

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将Swift桥接到React-Native时,“不是公认的Objective-C方法”

如何将Swift代码导入Objective-C?

如何将Objective-C App委托转换为Swift?

您如何将数据从Objective C传递到Swift?

如何将Swift String桥接到Objective C NSString?

如何将Swift结构作为参数传递给Objective-C方法

如何使用桥接头将Objective-C cocoapod导入Swift

如何将Objective-C NSError指针传递给Swift函数?

将一系列枚举从Swift桥接到Objective-C

如何将Objective-C和Swift混合使用以构建cocoapods框架

如何将React Native Promise桥接到Swift

如何将此Swift语法转换为Objective C?

将Swift 4枚举桥接到目标C

iOS Swift框架:如何将Objective C代码正确导入swift框架?

将Swift初始化程序桥接到目标C

自动将C结构函数桥接到Swift方法

如何将AWS SDK for iOS与Objective-C而非Swift结合使用?

如何将Objective-C`sortedArrayUsingSelector:NSSelectorFromString`转换为swift?

Objective-C int作为Int32桥接到Swift

如何将Swift Promise桥接到React Native

当Objc-C桥接到Swift以及反之时如何查看方法签名?

如何将Swift类传递给需要类的Objective-C方法?

如何将Objective-C工厂方法转换为Swift便捷初始化程序?

我如何将其从Objective-C转换为Swift

如何将Swift类转换为UnsafePointer,例如Objective-C中的__bridge

如何将Objective-C块转换为Swift闭包?

如何将Objective-C代码转换为Swift代码-错误处理,iOS

我们如何将Objective-C常量导入为Swift类型?

如何将std :: function从Objective-C ++传递给C ++方法