首页 > 解决方案 > 将数据从模型传递到控制器

问题描述

我想知道当我想将数据从模型传递到控制器时,最佳实践是什么。

我想做什么我想
在时间变化时更新标签。

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

标签: iosswiftmodel-view-controller

解决方案


选项1

1-添加这个变量

weak var delegate: ViewController?

viewDidLoadVC的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
}

推荐阅读