美文网首页
swift 修改懒加载中的属性值

swift 修改懒加载中的属性值

作者: 没有格子衫 | 来源:发表于2020-03-22 01:01 被阅读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 小白,大家一起深入交流,进步~ 哈哈哈。

大家多和热水~早点休息

相关文章

  • swift 修改懒加载中的属性值

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

  • Swift入门三(知识点)

    可选项 解包: 懒加载 懒加载Swift和OC的区别 getter 和setter 只读属性(计算型函数,有返回值...

  • Swift:)懒加载Lazy

    OC中,要实现懒加载是用到getter方法,例如 Swift懒加载差别就很大了,懒加载属性用lazy修饰,注意结尾...

  • Swift笔记(一)属性、析构、调用OC单例

    目录 swift属性存储属性懒加载属性计算属性属性监听类型属性 swift析构函数 swift调用OC单例类方法 ...

  • swift 中 Lazy,deinit用法

    * swift中懒加载写法,懒加载在Swift中是一个闭包。 懒加载详细介绍看这里 * OC中的dealloc方法...

  • Swift中的懒加载

    相信大家对OC中的懒加载都不陌生,但是Swift中的懒加载你又熟悉不熟悉呢?Swift中的懒加载较OC的简单了很多...

  • Swift: lazy 属性的写法

    序言:OC中有懒加载,Swift中用lazy关键字声明属性,也可以实现懒加载。lazy所修饰的属性只有第一次访问时...

  • 2019-06-10

    swift中单利的写法 懒加载

  • swift中使用runtime修改属性值

    swift中使用runtime修改属性值 Swift中的@objc和dynamic关键字 在OC中继承自NSObj...

  • 学习Swift 所遇到的坑系列(2)

    1.如何在Swift中进行懒加载 使用ObjectC开发的同学,习惯性的使用懒加载去加载属性或者控件,那么到了Sw...

网友评论

      本文标题:swift 修改懒加载中的属性值

      本文链接:https://www.haomeiwen.com/subject/wrnpyhtx.html