Ios 在不同的swift脚本中使用struct中的数据
我有一些获取API响应的代码,我想让它存储在另一个脚本中,因为Ios 在不同的swift脚本中使用struct中的数据,ios,json,swift,Ios,Json,Swift,我有一些获取API响应的代码,我想让它存储在另一个脚本中,因为json是一个局部变量,所以我只能使用getData函数中的数据 代码如下: import UIKit class HomeViewController: UIViewController { @IBOutlet weak var TestLabel: UILabel! override func viewDidLoad() { super.viewDidLoad()
json
是一个局部变量,所以我只能使用getData
函数中的数据
代码如下:
import UIKit
class HomeViewController: UIViewController {
@IBOutlet weak var TestLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
let url = """
https://api.coronavirus.data.gov.uk/v1/data?filters=areaType=nation;areaName=england&structure=%7b%22date%22:%22date%22,%22areaName%22:%22areaName%22,%22areaCode%22:%22areaCode%22,%22newCasesByPublishDate%22:%22newCasesByPublishDate%22,%22cumCasesByPublishDate%22:%22cumCasesByPublishDate%22,%22newDeathsByDeathDate%22:%22newDeathsByDeathDate%22,%22cumDeathsByDeathDate%22:%22cumDeathsByDeathDate%22%7d
"""
getData(from: url)
// Do any additional setup after loading the view.
}
func getData(from url: String) {
guard let theURL = URL(string: url) else { print ("oops"); return }
let getfromurl = URLSession.shared.dataTask(with: theURL, completionHandler: {data, response, error in
guard let data = data, error == nil else{
print("Something Went Wrong")
return
}
//Have data
var result: Response?
do {
result = try JSONDecoder().decode(Response.self, from: data)
}
catch{
print("failed to convert \(error)")
}
guard let json = result else {
return
}
print(json)
})
getfromurl.resume()
}
}
struct Response: Codable {
let data: [MyData]
}
struct MyData: Codable{
let date: String
let areaName: String
let areaCode: String
let newCasesByPublishDate: Int
let cumCasesByPublishDate: Int?
let newDeathsByDeathDate: Int?
let cumDeathsByDeathDate: Int?
}
Swift正在使用模块。 数据结构
响应
将在整个应用程序中为您提供,因为它是应用程序的一部分。
我建议您通过阅读扩展Swift如何使用模块的知识
至于应用程序的体系结构部分,我建议创建一个单独的类,该类将是一个解析响应并将其返回给调用它的人的服务。
您应该为此使用完成处理程序
一些伪例子
final class CovidService {
func getData(url: String, @escaping completion:((Result<Response,Error>) -> Void)) {
// your get data function
//.....
guard let json = result else {
completion(SomeError)
return
}
completion(json)
}
}
final类CovidService{
func getData(url:String,@转义完成:((结果)->Void)){
//获取数据函数
//.....
guard let json=result else{
完成(某些错误)
返回
}
完成(json)
}
}
使用此服务,您可以获取每个ViewController或其他您希望的实体中的数据
更多的阅读可以扩展您对Swift中完成处理程序和服务的了解
在HomeViewController之外,这里的“另一个脚本”是什么?你应该考虑类和结构,而不是不同的脚本。是的,在HomeViewController之外,我希望能够在某种中心脚本中引用它,而不是在这个ViewController中,但我不知道如何在视图控制器中调用这个API