Как вызвать метод Objective-C `initFoo` без аргументов от Swift? - PullRequest
0 голосов
/ 12 июня 2018

У меня есть класс Objective-C, который объявляет методы, такие как:

@interface MyClass: NSObject

- (instancetype) initWithDefaultsFoo;
- (instancetype) initWithDefaultsBar;

@end

XCode автоматически генерирует соответствующий интерфейс Swift:

open class MyClass : NSObject {
    public init!(defaultsFoo: ())
    public init!(defaultsBar: ())
}

Но как мне построить 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 голосов
/ 12 июня 2018

По сути, вы сталкиваетесь с ошибкой в ​​Objective-C;никакой инициализатор не должен выглядеть так.Либо инициализатор должен быть init и не принимать параметров, либо он должен быть initWith... и принимать параметр.Ваш Objective-C нарушает соглашения об именах, и его перевод Свифта, соответственно, загорается.

0 голосов
/ 12 июня 2018
var x = MyClass(defaultsFoo: ())

должно работать.Причина, по-видимому, не в том, что когда XCode автоматически завершил вызов, он заполнил заполнитель, который выглядит как (), но на самом деле не ().

enter image description here

(Обратите внимание на выделение синим цветом. Проверка файла на диске также показывает, что заполнитель записывается как <#T##()#>.)

В качестве альтернативы:

var x = MyClass(defaultsFoo: Void())

также, кажется, работает, но, вероятно, уродливее.

...