如何在 swift 中将数据从模型发送回控制器?

How do I send data from the Model back to the Controller in swift?

我目前正在编写自定义生产力应用程序,但我 运行 遇到了障碍。我正在使用 MVC 编码方法。我在模型 class 中完成了所有时间计算,并在控制器 class 上更新了视图。

但是,我在将数据从模型发回控制器时遇到了问题。我不能使用 return 方法,因为循环数据的模型 class 函数是由另一个方法调用的,而不是由控制器 class 调用的。

这是我的 ViewController class:

    import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var display: UILabel!

    @IBOutlet weak var cartonInput: UITextField!

    @IBOutlet weak var peopleInput: UITextField!

    @IBAction func goButton(sender: UIButton) {
        let calculator = MyClass()
        if let people = Int(peopleInput.text!){
            if let carton = Int(cartonInput.text!){
                let placeholder = calculator.timeCalculation(carton, people: people)
                calculator.startTimer(placeholder)

            }
        }
    }

}

这是处理所有计算的模型:

    import Foundation

    class MyClass {

        var timerCounter:NSTimeInterval!


        func stringFromTimeInterval(interval: NSTimeInterval) -> String {
            let interval = Int(interval)
            let seconds = interval % 60
            let minutes = (interval / 60) % 60
            let hours = (interval / 3600)
            return String(format: "%02d:%02d:%02d", hours, minutes, seconds)
        }

        func startTimer(hour: Int) {
            timerCounter = NSTimeInterval(hour)
            NSTimer.scheduledTimerWithTimeInterval(1, target: self,
                 selector: #selector(MyClass.onTimer(_:)), 
                 userInfo: nil, repeats: true)
        }

        @objc func onTimer(timer:NSTimer!){
            //this is where I need to send the data from, back to the 
            //controller so that the controller can update the display.
            timerCounter! -= 1
        }


        func timeCalculation(cartons: Int, people: Int) -> Int{
            let numberOfCartons = Double(cartons)
            let numberOfPeople = Double(people)
            let timeCalculations: Double = numberOfCartons / 4.7 / 
              numberOfPeople
            let timeSeconds = (timeCalculations * 60) * 60
            return Int(round(timeSeconds))

        }
    }

我是新手,所以如果您能提供尽可能简单的解释帮助,我们将不胜感激。这将帮助我学习和成长。

嗯,在最基本的意义上,模型可以使用委托、协议、通知等与控制器通信。 例如

根据来源link,我将在本文末尾提供 post,模型向控制器发送数据的三种常见模式是:

  1. 委派
  2. 通知中心
  3. 键值观察

主要信息来源是this

但是,要深入了解所有内容,请阅读 link

一个很酷且易于理解的示例是与 UIButton 相关的 IBAction 委托。