gpt4 book ai didi

json - Swift 全局变量

转载 作者:可可西里 更新时间:2023-11-01 01:09:57 26 4
gpt4 key购买 nike

我是 Swift 的初学者,如果这不太合理,请告诉我,但我有一个 JSON 文件,我可以快速访问它并解析成一个数组,从那里我可以从数组并将其存储在 var 中。我希望能够全局访问此变量,但我不确定该怎么做。

在另一个用户“rmaddy”的帮助下。我有这段代码:

struct Games: Decodable {
let videoLink: String
}

class BroadService {
static let sharedInstance = BroadService()

func fetchBroadcasts(completion: @escaping ([Games]?) -> ()) {
let jsonUrlString = "LINK IS HERE."
guard let url = URL(string: jsonUrlString) else {
completion(nil)
return
}

URLSession.shared.dataTask(with: url) { (data, response, err) in
guard let data = data else {
completion(nil)
return
}

do {
let games = try JSONDecoder().decode([Games].self, from: data)
completion(games)
} catch let jsonErr {
print("Error deserializing json:", jsonErr)
completion(nil)
}
}.resume()
}
}

然后我可以从这里在另一个类中访问它:

BroadService.sharedInstance.fetchBroadcasts { (games) in
if let games = games {
let game = games[indexPath]
let videoLink = game.videoLink

}

我希望能够全局访问“videoLink”的内容,而不必使用“BroadService.sharedInstance.fetchBroadcasts { (games) in” 我该怎么做

最佳答案

你不应该使用全局变量,我认为任何语言都不推荐这样做。

现在您有了一个看起来像 Singleton 类 (BroadService) 的东西,这很好,因为它是您正在寻找的一个很好的解决方案。

接下来您需要做的就是向该类添加一个属性。比方说 videoLink 是一个字符串,你可以给 BroadService 添加一个字符串属性,例如 storedVideoLink 作为一个可选的字符串,下次你需要获取该值在您已经获取它之后,您可以像这样访问它:BroadService.sharedInstance.storedVideoLink

还有一件事,要让 BroadService 作为单例正常工作,您应该将其 init 设为私有(private)。

总而言之,这是我的建议:

class BroadService {
static let sharedInstance = BroadService()
var storedVideoLink: String?

private init() {} // to ensure only this class can init itself

func fetchBroadcasts(completion: @escaping ([Games]?) -> ()) {
// your code here
}
}

// somewhere else in your code:
BroadService.sharedInstance.fetchBroadcasts { (games) in
if let games = games {
let game = games[indexPath]
let videoLink = game.videoLink
BroadService.sharedInstance.storedVideoLink = videoLink
}
}
// now you can access it from anywhere as
// BroadService.sharedInstance.storedVideoLink

这样一来,所有内容都在同一个类中保持凝聚力。你甚至可以为 storedVideoLink 添加一个 getter 方法,这样你就不必直接访问它,在这个方法中你可以声明如果字符串为 nil 那么你获取数据,将链接存储到字符串,然后返回字符串。

关于json - Swift 全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48171941/

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