In a real world app, for an offline cart, instead of using a global variable, you can create a singleton Cart object and have your products added to it in the form of array. You can access your cart from any view controller, for example CartViewController. It seems that you're creating a new instance of CartViewController every time which will not hold your old variables. Anyway, a global variable can do the job for you for this specific simple project.
Example (Singleton):
//Item object to add to cart
class Item: NSObject {
var itemName: String = String()
var itemDescription: String = String()
var itemPrice: Float = Float()
convenience init(itemName: String, itemDescription: String, itemPrice: Float) {
self.init()
self.itemName = itemName
self.itemDescription = itemDescription
self.itemPrice = itemPrice
}
override var description: String {
return "\n\nItem Name: \(self.itemName)\nItem Description: \(self.itemDescription)\nItem Price: $\(self.itemPrice)\n"
}
}
//The Cart shared object
class Cart: NSObject {
static let sharedInstance = Cart()
private var cartItems: [Item] = []
var items: [Item] {
return self.cartItems
}
override private init() {}
func addItem(_ item: Item) {
self.cartItems.append(item)
}
func removeLastItem() {
if self.cartItems.count > 0 {
self.cartItems.removeLast()
}
}
}
Sample Usage:
Cart.sharedInstance.addItem(Item.init(itemName: "First Item",
itemDescription: "Item description 1",
itemPrice: 9.99))
Cart.sharedInstance.addItem(Item.init(itemName: "Second Item",
itemDescription: "Item description 2",
itemPrice: 99.99))
print("*****Added 2 items to cart*****")
print(Cart.sharedInstance.items)
Cart.sharedInstance.removeLastItem()
print("*****Removed 1 item from cart*****")
print(Cart.sharedInstance.items)
Console Output:
*****Added 2 items to cart*****
[
Item Name: First Item
Item Description: Item description 1
Item Price: $9.99
,
Item Name: Second Item
Item Description: Item description 2
Item Price: $99.99
]
*****Removed 1 item from cart*****
[
Item Name: First Item
Item Description: Item description 1
Item Price: $9.99
]