如何在 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
,您将获得对唯一一个对象的引用,该对象具有此示例中的其他属性 dataObj1
和 someObj2
。
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
}
}
所以我有一个 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
,您将获得对唯一一个对象的引用,该对象具有此示例中的其他属性 dataObj1
和 someObj2
。
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
}
}