如何在没有Swift参数的情况下调用Objective-C`initFoo`方法?

时间:2018-06-12 00:13:17

标签: objective-c swift

我有一个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 '()'

2 个答案:

答案 0 :(得分:1)

var x = MyClass(defaultsFoo: ())

应该有效。为什么看似没&#39的原因;吨是因为当XCode的自动完成呼叫,它在的占位符填充看起来像()但是,这不是'吨实际上()

enter image description here

(请注意蓝色突出显示。检查磁盘上的文件还会显示占位符被写为<#T##()#>。)

可替换地:

var x = MyClass(defaultsFoo: Void())

似乎也有效,但可能更加丑陋。

答案 1 :(得分:-1)

基本上,您遇到的是Objective-C中的错误;没有初始化程序应该是这样的。初始值设定项应为init且不带参数,或者应为initWith...并采用参数。你的Objective-C违反了命名惯例,而Swift对它的翻译也相应地掀起了火焰。