SwiftUI 中的 ORSSerialPort.send 无法连接

Posted

技术标签:

【中文标题】SwiftUI 中的 ORSSerialPort.send 无法连接【英文标题】:ORSSerialPort.send in SwiftUI won't connect 【发布时间】:2021-08-23 20:42:37 【问题描述】:

我想从 Mac 使用 ORSserial 向 Arduino 发送一个字节。当我使用 ORSSerialPort 终端演示代码时,框架、硬件和 Arduino 代码工作。它连接并发送一个字节,完美地点亮 Arduino tx/rx 和输出 LED。但是,当我使用 ORSSerial 和 SwiftUI 做同样的事情时,它根本不会点亮任何 LED。我尝试将类实例化放在不同的位置,并将设置/打开代码放在初始化以外的函数中,甚至使用按钮回调。到目前为止仍然不能在 SwiftUI 中工作。我是 swift 和 swiftui 的新手,所以我的代码中可能存在可怕的错误,但就是这样。欢迎所有建议/批评,谢谢。

    import SwiftUI 
    import ORSSerial

    class myPort: NSObject, ORSSerialPortDelegate 

       var serialPort = ORSSerialPort(path: "/dev/cu.usbmodem14101")
       let myData = "2".data(using: .utf8)

       override init()
           super.init()
           print("starting:")
           if (serialPort != nil)
               serialPort?.baudRate = 9600
               serialPort?.numberOfDataBits = 8
               serialPort?.numberOfStopBits = 1
               serialPort?.parity = .none
               serialPort?.usesRTSCTSFlowControl = false
               serialPort?.open()
               if ((serialPort?.isOpen) != nil)
                   serialPort?.send(myData!) // someData is an NSData object
                   print("sending: \(String(describing: myData))")
                else print("Error: opening port")
            else print("Error: getting port")
       

       func serialPortWasRemovedFromSystem(_ serialPort: ORSSerialPort) 
           print("Error: port removed")
       

       deinit 
           serialPort?.close()
           print("Port closed")
       
    
    
    struct ContentView: View  
       var sendArduino = myPort()
       var body: some View 
           VStack
              Text("Done yet?")
           
           .frame(width: 400, height: 400)
       
    

【问题讨论】:

您是说您的myPort 代码在另一个测试环境中都可以工作,但在SwiftUI View 中使用时却不行? 不。 ORSserialPort 示例演示是一个接口构建器和 swift 终端 Xcode 项目,它连接并向我的 Arduino 发送一个字节罚款。当我尝试对 ORSserialPort 和 SwiftUI 做同样的事情时,它甚至没有连接更少发送字节:/ 好吧,现在我更困惑了。 “不”是指是的,我的评估是正确的吗? 可能与权利/安全性有关。您是否在您的权利中设置:<key>com.apple.security.device.serial</key> <true/>?查看 SwiftUI 演示:github.com/janhendry/ORSSerialPort/tree/master/Examples/… 抱歉,我的“不”是说我尝试编写的任何 SwiftUI 代码都不起作用。 ORSserial 端口演示是一个简单的终端,所以我编译了输入数字 2 并发送到 Arduino 罚款。 【参考方案1】:

感谢 workingdog 的提示,我只需将 com.apple.security.device.serial 作为布尔值添加到权利并将其设置为 true :)

【讨论】:

以上是关于SwiftUI 中的 ORSSerialPort.send 无法连接的主要内容,如果未能解决你的问题,请参考以下文章

无法从 ORSSerialPort 接收数据

为啥 ORSSerialPort serialPort:didReceiveData NSData 只有单字节?

SwiftUI 中的动画状态变化

如何在 SwiftUI 的 ScrollView 中制作动画? SwiftUI 中的手风琴风格动画

SwiftUI 中的@FetchRequest

SwiftUI:随机“调用中的额外参数”错误