ios - 将数据从模型传递到 Controller

标签 ios swift model-view-controller

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

我想做的事情
我想在时间改变时更新标签。

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?

2- 在vc的viewDidLoad

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
}

关于ios - 将数据从模型传递到 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53458265/

相关文章:

java - 如何将 servlet 的响应重定向到我们收到请求的同一个 jsp 页面

具有透明背景的 iOS 应用程序图标在设备上显示黑色背景

ios - 如何将目标添加到键盘完成/转到/搜索按钮?

ios - 如何在 iOS swift 中使用 firestore 获取用户的帖子数

ios - 文本字段隐藏聊天的最后一条消息 - Swift

php - 如何多次使用一个表中的一个外键在 Laravel 中获取数据?

grails - 在 Grails 中正确使用服务(根据 MVCS)

ios - 如何使用 Pushsharp 知道推送通知是否发送到 iOS 应用程序?

ios - 为什么我的 View 不旋转?

ios - 在 Sprite Kit 中使用纹理图集有什么好处?