我的项目中有4个文件:
myTableViewController.swift
myTableViewDataSource.swift
myCustomCell.swift公司
MyCuffelCy.Xib
以下是我实现的:
myTableViewController.swift:

import UIKit

class myTableViewController: UIViewController {

    let cellIdentifier: String = "myCell"// set same id in storyboard as well

    @IBOutlet weak var tableView: UITableView!
    override func viewDidLoad() {
        super.viewDidLoad()
        setup()
        // Do any additional setup after loading the view.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func setup(){

        let myDataSource = myTableViewDataSource.init(str: "init!")
        tableView.registerNib(UINib(nibName: "myCustomCell", bundle: nil), forCellReuseIdentifier: "myCell")
        tableView.dataSource = myDataSource
    }

myTableViewDataSource.swift:
import UIKit

class myTableViewDataSource: NSObject, UITableViewDataSource, UITableViewDelegate {

    init(str:String) {
        print(str)
    }

    // MARK: UITableViewDataSource
    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        print("section")
        return 3
    }

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        print("row")
        return 5
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("myCell", forIndexPath: indexPath) as! myCustomCell
        print("where's my cell")
        return cell;
    }
}

我所要做的只是让数据源成为另一个类,并将它的实例变量分配给我的tableView。
更新
根据@Rajan Maheshwari
tableview.reloadData()的底部添加setup()将得到正确的节/行号,
但仍然没有打印。。。从未执行过。
我这里可能有什么问题?

最佳答案

这是因为您的数据模型是局部变量。把它移到班级级别。例如:

class myTableViewController: UIViewController {
  let myDataSource: myTableViewDataSource
...
  func setup() {
    myDataSource =
...

这种方法称为MVVM模式。您可以找到有关此模式的信息here
此外,您的类应该以CamelCase样式命名。所以请将my...改为My...

07-24 22:21