1
struct Kitchen // Coordinator 

{
   var foodItems = [FoodItem] () // Collection of FoodItem objects.
   var wastedItems = [WastedItem]() // Collection of WastedItem 
   var totalSpend = Double()
   var currentSpend = Double()
   var weeklyHouseholdFoodBudget = Double()
   var wastageCost = Double()

   init(aTotal:Double,aCurrent:Double,aBudget:Double,aWastage:Double)
    {
    self.totalSpend = aTotal
    self.currentSpend = aCurrent
    self.weeklyHouseholdFoodBudget = aBudget
    self.wastageCost = aWastage
    }

struct FoodItem : Equatable 
{
    var itemName = String()
    var itemQuantity = Double()
    var dateOfUse = String()
    var unitOfMeasurement = String()

    init(aName:String,aQuantity:Double,aDateOfUse:String,aUnit:String) 
    {
     self.itemName = aName
     self.itemQuantity = aQuantity
     self.dateOfUse = aDateOfUse
     self.unitOfMeasurement = aUnit
    }

   mutating func listFoodItems() 
     {
       for item in foodItems
       {
        print("Item Name:", item.getName(),",",
              "Qunatity:",item.getItemQuantity(),",", 
              "Unit:",item.getUnitOfMeasurement(),",",
              "Date of use:",item.getDateOfUse())
        }
      }

     mutating func removeFoodItem(aFood:FoodItem) 
      {
       if let anIndex = foodItems.index(of: aFood)
       {
       foodItems.remove(at: anIndex)
       print(aFood.getName(),"Has been removed")
       }
      }

      mutating func useFood(aFoodItem:inout  FoodItem,inputQty:Double) 

      {
        if (aFoodItem.getItemQuantity()) - (inputQty) <= 0
        {
         self.removeFoodItem(aFood: aFoodItem)
        }
         else
        {
         aFoodItem.useFoodItem(aQty: inputQty)                 
        }
      }

***更新**** 我遇到的问题是当我使用 func listFoodItems() 更新的属性 itemQuantity 不会改变。我想知道如何更新集合,所以当我调用 func listFoodItems() 时,它会显示值更改。

删除是可以的,当函数运行时,集合会删除对象。问题一定是因为我使用 for item in foodItems 来显示,我需要在执行此操作之前使用更新的值重新加载它?

感谢您提供任何帮助。

4

1 回答 1

1

属性观察器用于属性。最简单的属性观察器示例。

class Foo {
    var bar: String = "Some String" {
        didSet {
            print("did set value", bar)
        }
    }
}

现在,如果您想显示一些更改,您需要在 didSet 方法中使用您自己的代码来执行此操作。例如调用 reloadData()。

于 2018-08-23T14:54:51.540 回答