我正在尝试编写一个MacOS应用程序,通过UDP套接字连接到网络上的无线电扫描仪。该应用程序将命令发送到扫描仪进行远程控制。当我硬编码NWConnection启动时,我可以让应用程序工作得很好,但当我放入一个表示端口或主机的变量时,我得到了一个Xcode错误。
我希望用户能够输入其特定的主机和端口地址,因此我为用户设置了文本字段来输入这些值。然后,我希望在初始化连接时检索这些值并将它们输入到主机和端口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会很高兴,并且一切正常。然而,只要我在host和port字段中放入一个变量,我就会收到Xcode的抱怨。
“在没有更多上下文的情况下,表达式的类型不明确”,构建失败。
为什么会发生这种情况?我如何在不对主机或端口进行硬编码的情况下建立NWConnection?好处是您不能从用户那里获得端口和主机并使用这些值来建立连接。
任何帮助都将不胜感激。
2条答案
按热度按时间zaqlnxep1#
调用
NWConnection.init(host:port:using:)
时,参数host
需要是NWEndpoint.Host
类型,port
需要是NWEndpoint.Port
类型。请尝试这个:
当您想要使用文本字段中的文本时,您需要将文本转换为
NWEndpoint.Host
和NWEndpoint.Port
。qcuzuvrc2#
XCode 14.0.1/SWIFT 5.7
我认为这可能会对Oper的回答稍加补充。
在这里,直接影响e1d0d1值是可以的。
我想这是意料之中的事,因为Apple's documentation的具体规定
但是,如果您使用中间变量来存储主机IP地址(例如,如果您通过
TextField
中的用户输入获取该地址),请小心:也没问题。预期,因为初始值设定项需要
String
。但是:
返回“无法将‘字符串’类型的值转换为指定类型‘NWEndpoint.主机’”的错误。
这似乎令人困惑,因为它在第一个示例中看起来是相同的,但带有一个中间变量。