Как создать источник данных для моего класса, как UITableDataSource? - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть класс GraphView (xib + class).Представление диаграммы с метками и другими элементами пользовательского интерфейса.Мне нужно создать протокол DataSource для этого класса, он был реализован в UITableView, как UITableDataSource.Это необходимо для более удобной работы с данными, которые я хочу загрузить в свой GraphView.

Если вы знаете, как это сделать или имеете ссылку на решение этого вопроса, пожалуйста, помогите мне.Спасибо за все вопросы!

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Создание пользовательского источника данных работает так же, как шаблон делегата.

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

0 голосов
/ 19 сентября 2018

Это было бы что-то вроде

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 {

    }

}
...