【问题标题】:How to load label every second in swift?如何快速加载标签每秒?
【发布时间】:2021-08-21 13:28:42
【问题描述】:

我有infor标签和test.txt文件内容,我可以设置每秒刷新一次以将内容加载到标签吗?

@IBOutlet weak var infor: NSTextField!

override func viewDidLoad() {
    super.viewDidLoad()

let test = Bundle.main.path(forResource: "test", ofType: "txt")

var content = ""
do {
    content = try String(contentsOfFile: test!)
    infor.stringValue = content
} catch let error as NSError {
    print("failed to read file")
    print(error)
}
}

【问题讨论】:

  • 使用Timer.scheduledTimer(....)
  • 诚实但基于意见的问题.... 为什么?性能、资源,基于我在 IT 领域 40 多年的直觉,几乎所有内容...为什么您真的需要在您的应用程序的每一秒都重新加载某些内容...好吧,因为您没有在最不移动的标签上,我必须说“开放”?你可以做得更好。你可以设计得更好。我错过了什么?

标签: swift string printing label


【解决方案1】:

试试这样的:

  let timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { timer in
    let test = Bundle.main.path(forResource: "test", ofType: "txt")
    var content = ""
    do {
        content = try String(contentsOfFile: test!)
        infor.stringValue = content
    } catch let error as NSError {
        print("failed to read file")
        print(error)
    }
 }

【讨论】:

  • 您可以考虑使用weak 引用,这样计时器就不会保持对self 的强引用。例如。 Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { [weak self] timer in … }.
  • 强制解包Bundle 内容?
  • 是的,所有优点。这只是一种方法,一种测试,以显示可以做什么。你不会真正使用它。 ... 测试! ,每秒从 Bundle 重新加载,真的,下一步。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-28
  • 1970-01-01
  • 2014-09-11
  • 1970-01-01
  • 2021-08-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多