ios - 将数据从模型传递到控制器
问题描述
我想知道当我想将数据从模型传递到控制器时,最佳实践是什么。
我想做什么我想
在时间变化时更新标签。
CurrentTime.swift (模型)
var timer: Timer?
var currentTime: String?
init() {
if timer == nil{
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(updateCurrentTime), userInfo: nil, repeats: true)
}
}
@objc private func updateCurrentTime(){
let df = DateFormatter()
df.dateFormat = "HH:mm"
df.timeZone = TimeZone.current
let timezoneDate = df.string(from: Date())
currentTime = timezoneDate
}
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?
viewDidLoad
VC的2-in
currentTime.delegate = self
3-
let timezoneDate = df.string(from: Date())
currentTime = timezoneDate
delegate?.update(currentTime)
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
}
推荐阅读
- jwt - 在数据库中存储刷新令牌是否安全?(为登录目的发布新的访问令牌)。或者有没有更简单的方法?
- python - 如何修复用法:setup.py [global_opts] cmd1 [cmd1_opts] 问题?
- spring - Spring OAuth2 谷歌登录+用户名和密码登录
- javascript - 在javascript中单击按钮时加载带有路径名的页面
- html - HTML5 VIdeo 控制可见性/z-index
- php - Laravel 不在 GoDaddy 共享主机上发送电子邮件
- javascript - 无需等待响应即可调用云函数
- r - 创建一个 R 函数,该函数选择向量的字符元素作为输入参数
- html - 为什么 CSS 中 td 的宽度百分比似乎不起作用?
- python - 检查 SQLAlchemy hybrid_properties 的表达式输出