如何在 swift 中全局更改结构中的值

how to change value in struct globally in swift

所以我有一个 api 请求从假的 api url 请求一堆数据,我得到的数据被放在一个占位符上,我只是想要拥有一个全局变量,以便能够在我的集合视图中使用该可编码数据数组。

   struct productsList{
        static var itemsList = [ProductItem]()
    
    }
    func getProducts() {
        storeRepo
            .getAllProducts()
            .subscribe { result in
                productsList.itemsList = result
                for item in productsList.itemsList{
                    print(item.category)
                }
            } onError: { error in
                print(error.localizedDescription)
            }.disposed(by: disposeBag)
    }
    func printReuslt() {
        for i in productsList.itemsList{
            print(i.id)
        }
    }

请注意,它不是打印 printResult() 而是在 .subscribe

内部循环

请注意,我正在使用 Moya 以及​​ RXswift

您要找的是 Singleton。 Swift 使这非常容易做到。基本上,简短而有趣的是,您创建的结构将自身初始化为自身的 属性。任何时候您访问(在此示例中)APIHandler.shared,您将获得对唯一一个对象的引用,该对象具有此示例中的其他属性 dataObj1someObj2

   class APIHandler {
        let shared = APIHandler()
        var dataObj1: YourObj?
        var someObj2: YourObj2?
    
        init() {
             self.someObj1 = yourMethodCall()
             self.someObj2 = someCalculation()
        }
    }

这就是您从另一个 class 访问它的方式。请注意,您可以访问 APIHandler.someObj 如果您没有创建对象,这将导致空引用异常,因此在执行此操作时始终访问 shared 属性.

class MainClass {
     let apiHandler: APIHandler?

      override func viewDidLoad(...) {
          super.viewDidLoad(...)
          apiHandler = APIHandler.shared
      }
}