如何在项目中任意ViewController中全局访问Class中的数据

2024-04-03

我是斯威夫特的新手。

目标:访问全球数据

如何使用Swift实现全局临时存储,使用下面的类来存储数据

In C#,

1)我使用具有静态属性的类

 Class TransactionData
    {
        public static DateTime dateTime { get; set; }
        public static int    Qty_Purchase { get; set; }
        public static double  ItemPrice { get; set; }
        public static string  Item_Code { get; set; }

   }

2)我可以全局访问、设置或使用数据

TransactionData.Item_Code = "P200.XXX";

在斯威夫特中,

a) 如何在swift中实现这样的类?

要设计类,使用 CocoaTouch 类还是 Swift 类?

Cocoa Touch 类(它是 UIViewController 的子类)和 Swiftui 类有什么不同

a) Swift 中有静态类吗

 public static Class TransactionData
    {
        public static DateTime dateTime { get; set; }
        public static int    Qty_Purchase { get; set; }
        public static double  ItemPrice { get; set; }
        public static string  Item_Code { get; set; }

   }

Thanks


如果您的目标是全局访问数据以进行临时存储,只需为您的事务创建一个结构:

struct Transaction {
    let date: Date
    let quantity: Int
    let price: Double
    let code: String
}

然后只需要创建一个单例 https://developer.apple.com/documentation/swift/cocoa_design_patterns/managing_a_shared_resource_using_a_singleton以及用于存储您的交易的属性:

class Shared {
    private init() { }
    static var instance = Shared()
    var transactions: [Transaction] = []
}

usage:

Shared.instance.transactions.append(Transaction(date: Date(), quantity: 2, price: 0.99, code: "item01"))
Shared.instance.transactions.append(Transaction(date: Date(), quantity: 3, price: 2.99, code: "item02"))

Shared.instance.transactions  // [{date "Jan 10, 2017, 2:00 AM", quantity 2, price 0.99, code "item01"},
                              //  {date "Jan 10, 2017, 2:00 AM", quantity 3, price 2.99, code "item02"}]

循环遍历您的交易并对其进行编辑:

for (index, transaction) in Shared.instance.transactions.enumerated() {
    print(transaction)
    if transaction.code == "item02" {
        Shared.instance.transactions[index] = Transaction(date: transaction.date, quantity: transaction.quantity, price: transaction.price, code: "NEW CODE")
    }
}

Shared.instance.transactions   // [{date "Jan 10, 2017, 2:42 AM", quantity 2, price 0.99, code "item01"}, {date "Jan 10, 2017, 2:42 AM", quantity 3, price 2.99, code "NEW CODE"}]

如果您只想有一个交易,只需将一个可选变量添加到您的共享结构而不是交易数组中:

class Shared {
    private init() { }
    static var instance = Shared()
    var transaction: Transaction?
}

和用法:

Shared.instance.transaction = Transaction(date: Date(), quantity: 5, price: 5.0, code: "P200")

print(Shared.instance.transaction?.code ?? "")   // "P200\n"

if let transaction = Shared.instance.transaction {
    Shared.instance.transaction = Transaction(date: transaction.date, quantity: transaction.quantity, price: transaction.price, code: "P300")
    print(Shared.instance.transaction!)   // "Transaction(date: 2017-01-10 05:13:58 +0000, quantity: 5, price: 5.0, code: "P300")\n"

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在项目中任意ViewController中全局访问Class中的数据 的相关文章

随机推荐