Ios 将数据从模型传递到控制器
我想知道当我想将数据从模型传递到控制器时,什么是最佳实践 我想做什么Ios 将数据从模型传递到控制器,ios,swift,model-view-controller,Ios,Swift,Model View Controller,我想知道当我想将数据从模型传递到控制器时,什么是最佳实践 我想做什么 我想在时间改变时更新标签 CurrentTime.swift(模型) ViewController.swift class ViewController: UIViewController { @IBOutlet var timeLabel: UILabel! var currentTime = CurrentTime() override func viewDidLoad() { }
我想在时间改变时更新标签 CurrentTime.swift(模型) ViewController.swift
class ViewController: UIViewController {
@IBOutlet var timeLabel: UILabel!
var currentTime = CurrentTime()
override func viewDidLoad() {
}
@IBAction func closeBtnWasPressed(_ sender: UIButton) {
dismiss(animated: true, completion: nil)
}
}
选项1 1-添加此变量
weak var delegate: ViewController?
2-在vc的viewDidLoad
中
currentTime.delegate = self
三,-
4-在vc内部
func update(_ data:String) {
lbl.text = data
}
当然你能做到
delegate?.lbl.text = currentTime
但上面是MVC
选项2
var ob:NSKeyValueObservation!
在viewDidLoad
ob = currentTime.observe(\CurrentTime.currentTime, options: .new) { cur, tex in
timeLabel.text = tex
}
您应该像这样定义一个动态类:
class Dynamic<T> {
var bind: (T) -> Void = { _ in }
var value: T? {
didSet {
bind(value!)
}
}
init(_ v: T) {
value = v
}
}
var currentTime: Dynamic<String>
您可以发布一个
通知
,或者提供一种在您的模型中注册观察者闭包的方法。您应该将日期格式化程序设置为惰性私有属性,而不是在每次计时器启动时创建它。创建日期格式化程序的成本相对较高。
class Dynamic<T> {
var bind: (T) -> Void = { _ in }
var value: T? {
didSet {
bind(value!)
}
}
init(_ v: T) {
value = v
}
}
var currentTime: Dynamic<String>
yourModel.currentTime.bind = { [weak self] time in
self?.timeLabel.text = time
}