如何调用Objective-C`initFoo`方法而不使用Swift的参数?
我有一个Objective-C类,它声明了如下方法:如何调用Objective-C`initFoo`方法而不使用Swift的参数?,objective-c,swift,Objective C,Swift,我有一个Objective-C类,它声明了如下方法: @interface MyClass: NSObject - (instancetype) initWithDefaultsFoo; - (instancetype) initWithDefaultsBar; @end XCode自动生成相应的Swift接口: open class MyClass : NSObject { public init!(defaultsFoo: ()) public init!(defaul
@interface MyClass: NSObject
- (instancetype) initWithDefaultsFoo;
- (instancetype) initWithDefaultsBar;
@end
XCode自动生成相应的Swift接口:
open class MyClass : NSObject {
public init!(defaultsFoo: ())
public init!(defaultsBar: ())
}
但是如何从Swift构建MyClass
我试过:
var x = MyClass(defaultsFoo: ()) // ERROR: Editor placeholder in source file.
var y = MyClass(defaultsBar: nil) // ERROR: Nil is not compatible with expected argument type '()'
应该有用。它看起来没有这样做的原因是,当XCode自动完成调用时,它填充了一个占位符,看起来像()
,但实际上不是()
(注意蓝色突出显示。检查磁盘上的文件也会显示占位符被写为
)
或者:
var x = MyClass(defaultsFoo: Void())
也似乎有效,但可能更丑陋。基本上,您遇到的是Objective-C中的一个bug;没有初始值设定项应该是这样的。初始值设定项应该是
init
且不带参数,或者应该是initWith…
且带参数。您的Objective-C违反了命名约定,斯威夫特对它的翻译也相应地付之一炬。Yikes!把这样的Objective-C初始值设定项转换成Swift是一个很糟糕的翻译。我想这是消除不同名称、零参数Objective-C初始值设定项歧义的最简单的方法。我想象一下,在这些Objective-C初始值设定项返回类型中添加一个适当的“nullable”/“not nullable”说明符,将得到一个Swiftinit
,而不使用奇数代码>。
var x = MyClass(defaultsFoo: Void())