gpt4 book ai didi

swift NIO : connect is not working if the code is in a class

转载 作者:行者123 更新时间:2023-11-30 10:35:03 25 4
gpt4 key购买 nike

我刚刚开始使用 SwiftNIO,第一次尝试使用了以下代码:

let group = MultiThreadedEventLoopGroup(numberOfThreads: 1)
let bootstrap = ClientBootstrap(group: group)
// Enable SO_REUSEADDR.
.channelOption(ChannelOptions.socket(SocketOptionLevel(SOL_SOCKET), SO_REUSEADDR), value: 1)
defer {
try? group.syncShutdownGracefully()
}

do {
let channel = try bootstrap.connect(host: "127.0.0.1", port: 1234).wait()
try channel.closeFuture.wait()
} catch let error {
print(error)
}

它有效,但我打印了一个错误,因为我的服务器没有运行。

但是如果我将该代码带到一个类中,什么也不会发生:

class Client {

let bootstrap: ClientBootstrap

init() {
let group = MultiThreadedEventLoopGroup(numberOfThreads: 1)
self.bootstrap = ClientBootstrap(group: group)
// Enable SO_REUSEADDR.
.channelOption(ChannelOptions.socket(SocketOptionLevel(SOL_SOCKET), SO_REUSEADDR), value: 1)
defer {
try? group.syncShutdownGracefully()
}
}

func connect(host: String, port: Int) throws {
let channel = try self.bootstrap.connect(host: host, port: port).wait()
try channel.closeFuture.wait()
}
}

let client = Client()
do {
try client.connect(host: "127.0.0.1", port: 1234)
} catch let error {
print(error)
}

我做错了什么?

最佳答案

原始代码在什么上下文中运行?在 init 方法中看到 defer 是不常见的,特别是在最后 - 它会在 init 完成后立即执行,而原始代码中的 defer 将在之后执行/em> do/catch block 被执行。

您可能希望关闭代码位于 Client 类的 deinit 方法中。

关于 swift NIO : connect is not working if the code is in a class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58216770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com