0

我正在尝试编写一个 macOS 应用程序,该应用程序通过 UDP 套接字连接到网络连接上的无线电扫描仪。该应用程序向扫描仪发送命令以进行远程控制。当我硬编码 NWConnection 启动时,我可以让应用程序正常工作,但是当我放置一个代表端口或主机的变量时,我得到一个 Xcode 错误。

我希望用户能够输入他们的特定主机和端口地址,因此我为用户设置了 textFields 以输入这些值。然后我想在初始化连接时检索这些值并将它们输入到 Host 和 Port NWConnection 字段中。

这是一个代码片段:

func makeConnection(){
        var myHost = "192.168.7.239"
        var myPort = 50536 as UInt16
        
        myConnection = NWConnection(host: myHost, port: myPort, using: .udp)
        myConnection?.stateUpdateHandler = { (newState) in
            switch (newState) {
            case .ready:
                print("ready")
                self.send()
                self.receive()
            case .setup:
                print("setup")
            case .cancelled:
                print("cancelled")
            case .preparing:
                print("preparing")
            default:
                print("waiting or failed")
                
            }
        }  

在这种情况下,如果我将 myHost 替换为“192.168.7.239”,并将 myPort 替换为 50536,那么 Xcode 很高兴并且一切正常。但是,只要我在主机和端口字段中放入变量,我就会从 Xcode 收到此投诉。

“没有更多上下文的表达式类型不明确”并且构建失败。

为什么会发生这种情况?如何在不对主机或端口进行硬编码的情况下创建 NWConnection?有什么好处是您无法从用户那里获取端口和主机并使用这些值来建立连接。

任何帮助将不胜感激。

4

1 回答 1

0

调用NWConnection.init(host:port:using:)时,参数host需要是类型NWEndpoint.Hostport需要是NWEndpoint.Port

请试试这个:

        var myHost: NWEndpoint.Host = "192.168.7.239"
        var myPort: NWEndpoint.Port = 50536
        
        myConnection = NWConnection(host: myHost, port: myPort, using: .udp)

当您想使用 textFields 中的文本时,您需要将文本转换为NWEndpoint.Hostand NWEndpoint.Port

于 2020-12-24T01:56:27.620 回答