Создание объекта в Swift с использованием фабричного метода Objective C дает ошибку компилятора
Я пытаюсь инициировать последовательное соединение с помощью ORSSerialport
Серийная библиотека Objective-C. Я уже успешно использовал его, чтобы найти все последовательные порты, но у меня проблемы с открытием соединения.
Документация показывает открытие порта как таковое:
ORSSerialPort *serialPort = [ORSSerialPort serialPortWithPath:@"/dev/cu.KeySerial1"];
Я написал следующее:
let serialPort: ORSSerialPort.serialPortWithPath(serialListPullDown.selectedItem)
Тем не менее, Xcode не выполняет автозаполнение моего метода и не будет компилироваться. Дает мне ошибку "serialPortWithPath не является членом типа ORSSerialport". У меня правильно установлен мостовой заголовок, и я уже использовал другой класс в той же библиотеке с похожим синтаксисом без проблем. Что здесь произошло?
1 ответ
Краткий ответ: создайте объект с
let serialPort = ORSSerialPort(path:"/dev/cu.KeySerial1")
Детали: фабричный метод Objective-C
+ (ORSSerialPort *)serialPortWithPath:(NSString *)devicePath;
сопоставлен с Swift как
init!(path devicePath: String!) -> ORSSerialPort
Это описано в разделе "Взаимодействие с API-интерфейсами Objective-C" (спасибо Nate Cook!):
Для согласованности и простоты фабричные методы Objective C отображаются как удобные инициализаторы в Swift. Это отображение позволяет использовать их с тем же кратким и понятным синтаксисом, что и инициализаторы.
Это означает, что фабричный метод сопоставлен с тем же методом Swift, что и метод init Objective-C
- (id)initWithPath:(NSString *)devicePath;
Оба будут называться из Swift как
let serialPort = ORSSerialPort(path:"/dev/cu.KeySerial1")
и получается, что это вызывает метод init. Как следствие, фабричный метод не может быть вызван из Swift.