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 回答