如何在 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,模型向控制器发送数据的三种常见模式是:
- 委派
- 通知中心
- 键值观察
主要信息来源是this
但是,要深入了解所有内容,请阅读 link。
一个很酷且易于理解的示例是与 UIButton 相关的 IBAction 委托。
我目前正在编写自定义生产力应用程序,但我 运行 遇到了障碍。我正在使用 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,模型向控制器发送数据的三种常见模式是:
- 委派
- 通知中心
- 键值观察
主要信息来源是this
但是,要深入了解所有内容,请阅读 link。
一个很酷且易于理解的示例是与 UIButton 相关的 IBAction 委托。