Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何调用Objective-C`initFoo`方法而不使用Swift的参数?_Objective C_Swift - Fatal编程技术网

如何调用Objective-C`initFoo`方法而不使用Swift的参数?

如何调用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

我有一个Objective-C类,它声明了如下方法:

@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”说明符,将得到一个Swift
init
,而不使用奇数
var x = MyClass(defaultsFoo: Void())