Swift orserialport.send不';我什么也不寄

Swift orserialport.send不';我什么也不寄,swift,string,macos,serial-port,orsserialport,Swift,String,Macos,Serial Port,Orsserialport,我是新来的(非常新!!)swift和traggle让我的UI通过串口发送字符串。我已经设法打开端口并读取/解析传入的通信量,但在发送字符串时,什么也不发送 我需要做的是在sendtext字段中键入,然后按下send按钮将字符串发送到串行端口。此外,当我打印要通过串行端口发送的数据时,它会打印我尝试发送的字节数(即5个字节)。这不应该是我试图发送到串行端口的字符串“Hello”吗 我使用的是Xcode版本11.2(11B52)和Swift 5 任何帮助都将不胜感激。提前谢谢你 以下是我如何调用“发

我是新来的(非常新!!)swift和traggle让我的UI通过串口发送字符串。我已经设法打开端口并读取/解析传入的通信量,但在发送字符串时,什么也不发送

我需要做的是在
sendtext字段中键入
,然后按下
send按钮
将字符串发送到串行端口。此外,当我打印要通过串行端口发送的
数据时,它会打印我尝试发送的字节数(即5个字节)。这不应该是我试图发送到串行端口的字符串“Hello”吗

我使用的是Xcode版本11.2(11B52)和Swift 5

任何帮助都将不胜感激。提前谢谢你

以下是我如何调用“发送”功能的:

   @IBAction func SendButton(_ sender: Any) {
      let TxData = sendTextField.stringValue
      SFSerialIn.SendSerialData(TxData)      
   }
我的主要计划如下:

import ORSSerial
import IOKit
import IOKit.serial


let SFSerialRegexp =
    "(?<SFmode>[A-Z]+),\\s*" + "(?<prox>[0-1]),\\s*"

class SFSerialIn: NSObject, ORSSerialPortDelegate {


    let path = "/dev/cu.usbserial-AI0484S9" 
    let baudRate: NSNumber = 115200

    var serialPort: ORSSerialPort?
    var delegate: SFSerialDelegate?

    var stringBuffer = ""
    var regex: NSRegularExpression!
    var receivedBufferStart = false

    override init() {
        regex = try! NSRegularExpression(pattern: SFSerialRegexp)
    }

    deinit {
        disconnect()
    }

    func SendSerialData(_ TxData: String){
       let data = Data(TxData.utf8)
       serialPort?.send(data)
       print(TxData)
       print(data)
    }  

    func connect() {
        if let serialPort = ORSSerialPort(path: path) {
            serialPort.baudRate = baudRate
            serialPort.delegate = self
            serialPort.open()
        } else {
            print("Failed to open serial port")
        }
    }

    func disconnect() {
        serialPort?.close()
        print("closing port...")
    }


    func serialPort(_ serialPort: ORSSerialPort, didReceive data: Data) {
        guard let string = String(data: data, encoding: .utf8)
            else {
            return
        }

        stringBuffer += string

        parseBuffer()
    }

    func parseBuffer() {
        let lines = stringBuffer.split { $0.isNewline }

        guard lines.count > 1 else {
            return
        }

        let nextLines = lines[1...].joined()

        if !receivedBufferStart {
            stringBuffer = nextLines
            receivedBufferStart = true
            return
        }

        let line = String(lines[0])
        if let matchResult = regex.firstMatch(in: line, range: NSRange(..<line.endIndex, in: line)) {
            let sensorFrame = SFFrame(matchResult: matchResult, string: line)
            delegate?.receive(sensorFrame: sensorFrame)
            stringBuffer = nextLines
            return
        }

        print("Failed to parse line :(")
        stringBuffer = nextLines
    }

    func serialPort(_ serialPort: ORSSerialPort, didEncounterError error: Error) {
        print("Serial port encountered error", error)
    }

    func serialPortWasOpened(_ serialPort: ORSSerialPort) {
        print("Serial port opened")
    }

    func serialPortWasClosed(_ serialPort: ORSSerialPort) {
        print("Serial port closed")
    }

    func serialPortWasRemovedFromSystem(_ serialPort: ORSSerialPort) {
        print("Serial port was removed from system")
    }
  }

protocol SFSerialDelegate {
    func receive(sensorFrame: SFFrame)
}

extension StringProtocol {
    var data: Data { .init(utf8) }
}
导入或串行
导入IOKit
导入IOKit.serial
让SFSerialRegexp=
(?[A-Z]+),\\s*“+”(?[0-1]),\\s*
类SFSerialIn:NSObject,ORSSerialPortDelegate{
let path=“/dev/cu.usbserial-AI0484S9”
让波特率:NSNumber=115200
var serialPort:orserialport?
变量委托:SFSerialDelegate?
var stringBuffer=“”
var regex:NSRegularExpression!
var receivedBufferStart=false
重写init(){
regex=try!NSRegularExpression(模式:SFSerialRegexp)
}
脱硝{
断开连接()
}
func SendSerialData(xdata:String){
让数据=数据(TxData.utf8)
串行端口?.send(数据)
打印(TxData)
打印(数据)
}  
func connect(){
如果let serialPort=orserialport(路径:path){
serialPort.baudRate=波特率
serialPort.delegate=self
serialPort.open()
}否则{
打印(“无法打开串行端口”)
}
}
func disconnect(){
serialPort?.close()
打印(“关闭端口…”)
}
func serialPort(serialPort:orserialport,didReceive data:data){
guard let string=string(数据:数据,编码:.utf8)
否则{
返回
}
stringBuffer+=字符串
parseBuffer()
}
func parseBuffer(){
让line=stringBuffer.split{$0.isNewline}
警戒线。计数>1其他{
返回
}
设nextLines=lines[1…]
如果!已收到BufferStart{
stringBuffer=nextline
receivedBufferStart=true
返回
}
let line=String(第[0]行)

如果让matchResult=regex.firstMatch(in:line,range:NSRange(..),我觉得您从来没有在
serialPort
实例属性中存储打开的串行端口。因此,在执行
serialPort?.send(data)
时,
serialPort
为零,
(可选链接)操作符意味着
send()
未被调用

打开串行端口后,尝试将其存储在您的属性中:

func connect(){
如果let serialPort=orserialport(路径:path){
serialPort.baudRate=波特率
serialPort.delegate=self
serialPort.open()
self.serialPort=serialPort
}否则{
打印(“无法打开串行端口”)
}
}

有人能帮我吗?