gpt4 book ai didi

swift - 如何重新初始化单例类中的属性?

转载 作者:行者123 更新时间:2023-11-28 15:12:45 24 4
gpt4 key购买 nike

我现在面临的问题是,每当用户加载应用程序时。单例对象将运行

单例设计

import SocketIO

class SocketIOManager: NSObject {

static let sharedInstance = SocketIOManager()

var socket: SocketIOClient!

override init() {
socket = SocketIOClient(socketURL: URL(string: mainURL)!, .connectParams(["token": getToken()])])
super.init()
}

func establishConnection() {
socket.connect()

}

func closeConnection() {
socket.disconnect()
}

func getToken() -> String {
if let token = keychain["token"] {
return token
}
return ""
}
}

查看 init().connectParams,为了让用户连接到服务器, token 必须存在,因此 getToken () 正在传递。

如果 token 不存在,它将在没有 token 的情况下初始化套接字对象。我在 applicationDidBecomeActive

运行 establishConnection
func applicationDidBecomeActive(_ application: UIApplication) {
SocketIOManager.sharedInstance.establishConnection()
}

token 只有在用户登录后才会存在。

主要问题是,有没有办法重新初始化套接字对象?还是使用 didSetwillSet 方法?

最佳答案

也许是这样的?

var socket: SocketIOClient! {
didSet {
oldValue.closeConnection()
}
}

如果你愿意的话,看起来你也可以去掉 !,因为你在 init 中设置了它,假设 SocketIOClient.init 返回一个非可选实例。

关于swift - 如何重新初始化单例类中的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47380088/

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