swift 修改懒加载中的属性值

2020-03-22  本文已影响0人  没有格子衫

在日常开发中,我们常常会用到,懒加载,但是懒加载的创建方式使里面的属性往往是固定不变的。假如我们想改变懒加载中的属性值,就会有点麻烦。

使用场景

今天在开发中遇到一个问题,TableView 需要添加一个 footView,代码中footview是通过懒加载出来的。一经创建,里面的样式是不可变的。但是需求中footview 并不是固定不变的,是需要根据数据的变化显示不同的footview 的显示形态。

根据这种场景,我想了两个解决方案:

就是根据不同的状态值,创建多种不同的footview。这样代码必定会比较冗余。不建议这样做,维护和代码阅读比较耗时间,以后假如需要修改,需要同时改很多套代码,增加工作量,不是很建议这种方法

回到使用场景中,做场景解析,比如:我们日常的 footView 一般都会这么做。

var footerView: UIView = {
    let head = UIVIew(frame: CGRect(x: 0, y: 0, width: kScreenWidth, height: 35))
    showMoreBtn = UIButton(frame: CGRect(x: 20, y: 0, width: kScreenWidth - 40, height: 25))
    showMoreBtn.setTitleColor(.lightGray), for: .normal)
    showMoreBtn.titleLabel?.textAlignment = .center
    showMoreBtn.titleLabel?.text = "这是一个footView"
    showMoreBtn.addTarget(self, action: #selector(showMoreBtnClickAction), for: .touchUpInside)
    addSubview(head.showMoreBtn)
    return head
}()

假如我们想根据tableView中的数据数量,制定不同文字的显示,就会显着有点棘手。

假如我们把 footerView 封装为一个带有text属性的View 在需要改变文字内容的时候,直接赋值改变footView.text属性,这样就会一套footview布局代码,显示多种样式。就会方便了很多 比如:

我们需要做的首先根据footView复杂程度,考虑要不要新建一个类页面来自定义这个footView,这里我的需求只是改变文本提示所以,没有必要新建一个页面,我就直接在当前页面下面,新建了一个 cusFootView 类来添加属性:

//MARK: 组尾视图添私有制属性
class cusFootView: UIView{
    var showMoreBtn = UIButton()
    var showType: Int? {
        didSet{
            if let num = showType {
                if num == 0 {
                    viewTitle = "暂无数据"
                }else if num <= 10{
                    //tableview一页显示10条数据,当一页不到十条数据时,显示 已经加载全部 提示
                    viewTitle = "已全部加载"
                }else{
                    viewTitle = "点击查看全部"
                }
            }
        }
    }
    var viewTitle: String?{
        willSet {
            showMoreBtn.setTitle(viewTitle, for: .normal)
        }
    }
}

这里我是在这个cusFootView中 添加了 showMoreBtn,showType,viewTitle三个属性,showMoreBtn会根据列表数量上的变化自动更新文本提示

  lazy  var footerView: cusFootView = {
        let head = proFootView(frame: CGRect(x: 0, y: 0, width: kScreenWidth, height: 35))
        head.showMoreBtn = UIButton(frame: CGRect(x: 20, y: 0, width: kScreenWidth - 40, height: 25))
        head.showMoreBtn.setTitleColor(UIColor.RGBA(hex: "#E8E8E9"), for: .normal)
        head.showMoreBtn.titleLabel?.textAlignment = .center
        head.showMoreBtn.addTarget(self, action: #selector(showMoreBtnClickAction), for: .touchUpInside)
        head.addSubview(head.showMoreBtn)

        return head
    }()

以后想显示不同状态的时候只需要改变footerView.showType这个数量,footview就会根据你设定的状态显示不同形态,这种方法比第一种方便了很多,后期也易维护,阅读

footerView.showType = list.count

这里就是footView自定义封装创建了,可以动态根据数据的变化,改变里面属性的显示值。

场景延伸

同样,我们在用到懒加载的场景中,有类似的需求,就可以直接封装一个我们自定义的类,来添加我们需要的扩展属性,并且在属性赋值willSet,didSet时,做一些我们自己的逻辑代码,就可以做到,懒加载中的属性值动态改变了。

结尾

这就是今天我想要跟大家分享的一个懒加载动态赋值解决方案,如有你有不同看法欢迎评论留言,毕竟我是一个swift 小白,大家一起深入交流,进步~ 哈哈哈。

大家多和热水~早点休息

上一篇 下一篇

猜你喜欢

热点阅读