Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/103.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在不同的swift脚本中使用struct中的数据_Ios_Json_Swift - Fatal编程技术网

Ios 在不同的swift脚本中使用struct中的数据

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()

我有一些获取API响应的代码,我想让它存储在另一个脚本中,因为
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