gpt4 book ai didi

swift - 尝试用 self 初始化结构会出错。正确的做法是什么?

转载 作者:行者123 更新时间:2023-11-30 11:07:08 26 4
gpt4 key购买 nike

我有一个网络管理器结构。我试图在我的主 UIViewController 中初始化它,但失败了。

struct NetworkManager {
static var enviroment: NetworkEnviroment = .production
static var apiKey = ""
private let mainApiRouter = Router<MainApi>()

func login(username: String, pass: String, completion:@escaping(_ product:User?, _ err: String?) ->()){
mainApiRouter.request(.login(username: username, password: pass)) { (data, resp, err) in
if err != nil {
completion(nil, "Please check your network connection")
} else {
if let reponse = resp as? HTTPURLResponse {
let result = handelNetworkResponse(reponse)
switch result {
case .success:
guard let responseData = data else {
completion(nil, NetworkResponse.noData.rawValue)
return
}
do {
let apiResponse = try JSONDecoder().decode(UserData.self, from: responseData)
if apiResponse.data != nil {
completion(apiResponse.data, nil)
} else {
completion(nil, "User login failed")
}
}catch(let error) {
completion(nil, "\(error.localizedDescription)")
}
case .failure(let failureError):
completion(nil, failureError)
}
}
}
}
}
}

然后这就是我在 View Controller 中初始化它的方式,这样我就可以在网络管理器结构中使用登录功能。当我调用 super.init 编码器时,网络管理器为零。

class LoginViewController: UIViewController {
var networkManager: NetworkManager!

init(networkManager: NetworkManager) {
super.init(nibName: nil, bundle: nil)
self.networkManager = networkManager
}

required init?(coder aDecoder: NSCoder) {
// super.init(coder: aDecoder)
fatalError("init(coder:) has not been implemented")
}
}

最佳答案

您的问题是,您正在尝试从 Storyboard 加载此 View Controller ,但尚未实现 Storyboard 用于初始化在 Storyboard 中创建的 View 的 init(coder:) 。如果您删除 fatalError 并使用 super.init(coder: aDecoder) ,那么您的 View Controller 将成功加载,但您用于初始化网络管理器的代码将永远不会被调用,因为 Storyboard不会加载 View Controller 时不要调用该初始化程序 - 您必须将该代码移到其他地方。

关于swift - 尝试用 self 初始化结构会出错。正确的做法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52582542/

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