Swift中的非响应流委托
所以我在Swift中使用套接字并试图将应用程序与我的服务器连接起来。 我让应用程序连接到服务器的IP地址,并在服务器上使用netcat
进行测试。 在执行期间,应用程序的控制台输出显示它已成功连接到服务器。 但是,流委托似乎没有响应。 当我输入netcat
,app控制台没有打印任何内容。 我已经搜索了很长一段时间,发现我的实现与其他实现非常相似。 也许我在这里遗漏了一些我看不到的东西。
任何想到这个问题的人都将不胜感激!
代码如下:
import UIKit class ViewController: UIViewController, StreamDelegate { let addr:String = "52.34.56.78" let port:Int = 1234 var inputStream: InputStream? var outputStream: OutputStream? override func viewDidLoad() { super.viewDidLoad() self.connect(host: addr, port: port) } func connect(host: String, port: Int) { Stream.getStreamsToHost(withName: host, port: port, inputStream: &inputStream, outputStream: &outputStream) if inputStream != nil && outputStream != nil { inputStream!.delegate = self outputStream!.delegate = self inputStream!.schedule(in: RunLoop.main, forMode: RunLoopMode.defaultRunLoopMode) outputStream!.schedule(in: RunLoop.main, forMode: RunLoopMode.defaultRunLoopMode) inputStream!.open() outputStream!.open() print("successfully connected") } else { print("connection unsuccessful") } } func stream(aStream: Stream, handleEvent eventCode: Stream.Event) { if aStream === inputStream { switch eventCode { case Stream.Event.errorOccurred: print("input: ErrorOccurred: \(aStream.streamError?.localizedDescription)") break case Stream.Event.openCompleted: print("input: OpenCompleted") break case Stream.Event.hasBytesAvailable: print("input: HasBytesAvailable") break default: break } } else { print("unknown stuff happened") } } }
经过大量的试验和错误后,我终于意识到stream()函数不起作用只是因为这个函数的签名不正确/过时了。
这是我正在使用的:
func stream(aStream: Stream, handleEvent eventCode: Stream.Event)
但它真的应该是:
func stream(_ aStream: Stream, handle eventCode: Stream.Event)
这可能是从以前的Swift版本到Swift 3的语法转换.XCode编译器通常会检测过时的函数/语法,但遗憾的是没有捕获到这个。
希望我的回答可以帮助那些仍然遭受这个问题的人。