[2] KVO

import UIKit

class NewsAPI: NSObject {
    
    static let service = NewsAPI()
    
    @objc dynamic private(set) var articles: [String] = []

    func fetchArticles(for source: String) {
        
    }
    
    func resetArticles() {
    }
    
}

class ArticleListController: UITableViewController {
    
    var source: String?
    
    private var token: NSKeyValueObservation?
    
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        guard let source = source else { return }
        
        /*
         let path1 = #keyPath(NewsAPI.articles)
         let path2 = \NewsAPI.articles
         let path3 = \.articles
         */
        token = NewsAPI.service.observe(\.articles) {
            _, _ in
            DispatchQueue.main.async {
                self.tableView.reloadData()
            }
        }
        NewsAPI.service.fetchArticles(for: source)
    }
    
    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        token?.invalidate()
        NewsAPI.service.resetArticles()
    }
    
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 最近一直在做原型图,中间有两天没有写简书了。感觉心里面特别不是滋味。所以今天好不容易忙中偷闲,所以今天必须写...
    Peak_One阅读 5,663评论 3 19
  • 我工作的亚洲食品杂货店位于墨尔本巿区南面靠海的一条繁华的街道上,这里有著名的cafe Las Chicas,就和我...
    麻婆婆阅读 2,586评论 0 1
  • 若想与上司有效沟通,你需要一点技巧。如果你要说服老板的意图太过明显,那么可能不会成功,因此要仔细斟酌一下沟通方法。...
    hello贡阅读 2,607评论 0 1
  • 坐车经过一个新建的高档小区时,我妈告诉我,康宁现在就住在这里。 猛的听到这个名字,我有一些恍惚,距离我们上次见面大...
    果仁小姐阅读 3,579评论 1 5
  • 有时候我会疑惑自己为何会开始写作。几年前我是这么想的——因为写作很简单。我很懒惰,又没有耐心,只想做简单又能立刻看...
    摄影师柳丁阅读 952评论 0 2