【问题标题】:How do I send data from the Model back to the Controller in swift?如何快速将模型中的数据发送回控制器?
【发布时间】:2016-09-25 15:14:33
【问题描述】:

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

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

这是我的 ViewController 类:

    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))

        }
    }

我是新来的,所以任何关于尽可能简单解释的帮助将不胜感激。这将帮助我学习和成长。

【问题讨论】:

    标签: ios swift timer nstimer


    【解决方案1】:

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

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

    1. 代表团
    2. 通知中心
    3. 关键值观察

    主要信息来源是this

    但是,要深入了解所有内容,请访问link

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-16
      • 2011-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多