如何像 UITableDataSource 一样为我的 class 创建 DataSource?

How create DataSource for my class like UITableDataSource?

我有一个 class GraphView(xib + class)。带有标签和其他 UI 元素的图表视图。 我需要为此 class 创建数据源协议,它是在 UITableView 中实现的,如 UITableDataSource。 这需要更舒适地处理数据,我想将其加载到我的 GraphView。

如果你知道怎么做或者有link这个问题的解决方法,请帮助我。 感谢所有问题!

它会像

protocol GraphDataSource {

    func Graph(_ graph:GraphView , row:Int)->UIView
}

protocol GraphDelegate {

    func Graph(_ graph:GraphView ,didSelect row:Int)
}

class GraphView:UIView {

    weak open var dataSource:GraphDataSource?

    weak open var delegate:GraphDelegate?

    func configureHere() {

        let v = dataSource?.Graph(self, row: 0)
        delegate?.Graph(self, didSelect: 0)
    }

}
class ViewController: UIViewController , GraphDataSource , GraphDelegate {


   let g = GraphView()

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        g.delegate = self
        g.dataSource = self

    }


    func Graph(_ graph: GraphView, didSelect row: Int) {

    }

    func Graph(_ graph: GraphView, row: Int) -> UIView {

    }

}

创建自定义数据源就像委托模式一样。

protocol GraphViewDataSource: class {
  func numberOfRow(for graph: GraphView) -> Int
}

class GraphView {
  weak var dataSource: GraphViewDataSource?

  init() {
    let numberOfRow = dataSource?.numberOfRow(for: self)
  }
}

注意:不要忘记将 dataSource 属性 设置为 weak 以避免引用循环(这就是为什么 GraphViewDataSource 需要限制为 class).