Как мне отобразить баланс между двумя разными наборами данных? - PullRequest
0 голосов
/ 20 апреля 2020

enter image description here Я хочу создать новую ячейку табличного представления на другом контроллере таблицы, который будет отображать баланс между данными о доходах и расходах. Как я могу взять сумму данных о доходах и данных о расходах, вычесть расходы из доходов, а затем подключить этот баланс к UILabel в новой ячейке?

Вот как выглядит мой проект:

  1. IncomeTableViewController - сцена, в которой указаны доходы.
  2. AddEditIncomeTableViewController - сцена, позволяющая пользователю создавать новый доход.
  3. IncomeTableViewCell - имеет настраиваемую ячейку. Один UILabel для имени дохода и другой UILabel для суммы дохода.
  4. ExpenseTableViewController - сцена, в которой перечислены расходы.
  5. AddEditExpenseTableViewController - сцена, позволяющая пользователю создавать новые расходы.
  6. ExpenseTableViewCell - имеет настраиваемую ячейку. Один UILabel для названия расходов и другой UILabel для суммы расходов.
import Foundation

struct Expense: Codable {
    var name: String
    var amount: String

    init(name: String, amount: String) {
        self.name = name
        self.amount = amount

    }

    static let DocumentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!

       static let ArchiveURL = DocumentsDirectory.appendingPathComponent("expenses").appendingPathExtension("plist")

       static func loadSampleExpenses() -> [Expense] {
           return [
                Expense(name: "Rent/Mortgage", amount: "0"),
                Expense(name: "Electric", amount: "0"),
                Expense(name: "Gas", amount: "0"),
                Expense(name: "Cell Phone", amount: "0"),
                Expense(name: "Groceries", amount: "0"),
                Expense(name: "Car Payment", amount: "0"),
                Expense(name: "Auto Expenses", amount: "0"),
                Expense(name: "Auto Insurance", amount: "0"),
                Expense(name: "Personal Care", amount: "0"),
                Expense(name: "Entertainment", amount: "0"),
                Expense(name: "Miscellaneous", amount: "0")]
       }

       static func saveToFile(expenses: [Expense]) {
              let propertyListEncoder = PropertyListEncoder()
              let codedExpenses = try? propertyListEncoder.encode(expenses)

              try? codedExpenses?.write(to: ArchiveURL, options: .noFileProtection)

       }

       static func loadFromFile() -> [Expense]? {
               guard let codedExpenses = try? Data(contentsOf: ArchiveURL) else { return nil }

               let propertyListDecoder = PropertyListDecoder()

               return try? propertyListDecoder.decode(Array<Expense>.self, from: codedExpenses)
       }

   }

import Foundation

struct Income: Codable {
    var name: String
    var amount: String

    init(name: String, amount: String) {
        self.name = name
        self.amount = amount
    }



    static let DocumentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!

    static let ArchiveURL = DocumentsDirectory.appendingPathComponent("incomes").appendingPathExtension("plist")

    static func loadSampleIncomes() -> [Income] {
        return [
            Income(name: "Main Income", amount: "0"),
            Income(name: "Secondary Income", amount: "0"),
            Income(name: "Interest Income", amount: "0")]

    }

    static func saveToFile(incomes: [Income]) {
           let propertyListEncoder = PropertyListEncoder()
           let codedIncomes = try? propertyListEncoder.encode(incomes)

           try? codedIncomes?.write(to: ArchiveURL, options: .noFileProtection)

    }

    static func loadFromFile() -> [Income]? {
            guard let codedIncomes = try? Data(contentsOf: ArchiveURL) else { return nil }

            let propertyListDecoder = PropertyListDecoder()

            return try? propertyListDecoder.decode(Array<Income>.self, from: codedIncomes)
    }

}

У меня также есть эти два файла, в которых я определяю расходы и доходы. Не уверен, какой код необходимо показать.

1 Ответ

1 голос
/ 20 апреля 2020

Если я правильно понимаю, вы хотите иметь общую модель для хранения данных, чтобы вы могли считывать и записывать данные из и в модель из разных UIViewControllers.

самый простой способ сделать это - использовать синглтон.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...