У меня есть класс Objective-C, который я хочу использовать в Swift.По причинам, которые выходят за рамки этого вопроса, мой метод класса init
помечен как недоступный.Вместо этого есть фабричный метод.Это упрощение того, как выглядит мой класс:
@interface MyClass : NSObject
+ (instancetype)myClass;
- (instancetype)init NS_UNAVAILABLE;
@end
Когда я использую его из Swift, я могу сделать let x = MyClass()
, и это хорошо, потому что, согласно правилам мостового соединения, компилятор пытается отобразитьфабричные методы к обычным инициализаторам.Проблема в том, что вместо фабричного метода вызывается «недоступный» метод init
.
Как заставить Swift использовать фабричный метод?
Дополнительные эксперименты:
Я уверен, что NS_UNAVAILABLE
работает, потому что, если я сделаю:
@interface MyClass : NSObject
- (instancetype)init NS_UNAVAILABLE;
@end
Затем на стороне Swift я получаю ожидаемое 'init()' is unavailable
сообщение об ошибке.
Это означает, что это фабричный метод, который позволяет let x = MyClass()
компилировать, но во время выполнения вызывается «неправильный» метод.