iOS   发布时间:2022-03-30  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – 如何从Swift中的viewController类中分离dataSource和delegate?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试从viewController中分离datasource和delegate,以防止viewController变得混乱.我通读了一些帖子,发现我可以像下面一样分开datasource,创建一个表示datasource的类:

import UIKit

class Datasource: NSObject,UITableViewDatasource,UITableViewDelegate {

    var movies = [String]()

    //MARK: - UITableViewDatasource
    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }

    func tableView(tableView: UITableView,numberOfRowsInSection section: int) -> Int {
        return movies.count
    }

    func tableView(tableView: UITableView,cellForRowATindexPath indexPath: NSIndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCellWithIdentifier("cellIdentifier",forIndexPath: indexPath) as UITableViewCell


        cell.textLabel?.text =  movies[indexPath.row]

        return cell
    }

}

我的问题是:如果我想在Datasource类中使用属​​性或调用viewController类的方法,我该怎么办?例如,我想在用户选择单元格时调用presentViewController:

func tableView(collectionView: UICollectionView,didSELEctItemATindexPath indexPath: NSIndexPath) {

    //do something here

    presentViewController(viewController!,animated: true,completion: nil)
}

解决方法

您可以处理选定的回调:

class Datasource: NSObject,UITableViewDelegate {

        var movies = [String]()
        private var SELEctedCallBACk = ((NSIndexPath)->Void)?

        func SELEctedItemATindex(callBACk:(NSIndexPath) -> Void) {
            SELEctedCallBACk = callBACk
        }
}

打回来:

func tableView(collectionView: UICollectionView,didSELEctItemATindexPath indexPath: NSIndexPath) {

    //do something here

    if let callBACk = SELEctedCallBACk {
       callBACk(indexPath)
    }
}

使用:

datasource.SELEctedItemATindex() {
  [weak self] indexPath in
  // do something ...
  // presentViewController(viewController!,completion: nil)
}

大佬总结

以上是大佬教程为你收集整理的ios – 如何从Swift中的viewController类中分离dataSource和delegate?全部内容,希望文章能够帮你解决ios – 如何从Swift中的viewController类中分离dataSource和delegate?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。