3

ORSSerialportObjective-C シリアル ライブラリを使用してシリアル接続を開始しようとしています。すでにすべてのシリアル ポートを正常に検出できましたが、接続を開く際に問題が発生しています。

ドキュメントには、ポートの開放が次のように示されています。

ORSSerialPort *serialPort = [ORSSerialPort serialPortWithPath:@"/dev/cu.KeySerial1"];

私は次のように書いています。

let serialPort: ORSSerialPort.serialPortWithPath(serialListPullDown.selectedItem)

しかし、Xcode は私のメソッドをオートコンプリートせず、コンパイルしません。「serialPortWithPath は ORSSerialport のメンバー タイプではありません」というエラーが表示されます。ブリッジング ヘッダーが正しく設定されており、同じライブラリ内の別のクラスを既に同様の構文で問題なく使用しています。ここで何が起こったのですか?

4

1 に答える 1

6

簡単な答え:でオブジェクトを作成します

let serialPort = ORSSerialPort(path:"/dev/cu.KeySerial1")

詳細: Objective-C ファクトリ メソッド

+ (ORSSerialPort *)serialPortWithPath:(NSString *)devicePath;

としてSwiftにマッピングされます

init!(path devicePath: String!) -> ORSSerialPort

これは「Interacting with Objective-C APIs」に記載されています ( Nate Cookに感謝します!):

一貫性とシンプルさのために、Objective-C ファクトリ メソッドは Swift の便利な初期化子としてマップされます。このマッピングにより、初期化子と同じ簡潔で明確な構文で使用できます。

つまり、ファクトリ メソッドは、Objective-C の init メソッドと同じ Swift メソッドにマップされます。

- (id)initWithPath:(NSString *)devicePath;

どちらも Swift から次のように呼び出されます。

let serialPort = ORSSerialPort(path:"/dev/cu.KeySerial1")

そして、これがinitメソッドを呼び出していることがわかります。その結果、ファクトリメソッドを Swift から呼び出すことはできません。

于 2014-10-21T16:44:52.893 に答える