android kotlin扩展添加域名

android kotlin扩展添加域名,第1张

android kotlin扩展添加域名?

你是否常为和系统方法变量起名冲突而烦恼?

你是否常为过多的方法名查找起来而而困惑?

你是否常为不知道谁写出的垃圾代码而头痛?

今天,给大家介绍一种添加域名的办法 , 让你的代码都添加上你的名字, 从此让你有更多的姿势来甩锅

tips: 灵感来自于IOS

先来看一段简单的IOS代码:

objC写法:

//下拉刷新
_tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
    // 空闲状态
    self->_tableView.mj_footer.state = MJRefreshStateIdle;
    // page = 1
    self->_mCurrentPage = 1;
    // 请求网络数据
    [self requestHttpData:self->mCurrentPage];
}];

//上拉加载
_tableView.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingBlock:^{
    // 空闲状态
    self->_tableView.mj_footer.state = MJRefreshStateIdle;
    // page++
    self->_mCurrentPage ++;
    // 加载数据
    if(self->_mCurrentPage <= self->_mPageCount){
      [self requestHttpData:self->mCurrentPage];
    } else {
      // 到底了 设置状态为没有更多数据
      self.tableView.mj_footer.state = MJRefreshStateNoMoreData;
    }
}];

// 立即进入刷新状态
[ self.tableView.mj_header beginRefreshing];

swift写法:

self.tableView.mj_header = MJRefreshNormalHeader.init(refreshingBlock: {
    // 设置状态为空闲状态
    self.tableView.mj_footer?.state = .idle
    self.mCurrentPage = 1
    // 请求网络数据
    requestHttpData(page:self.mCurrentPage)
})

self.tableView.mj_footer = MJRefreshBackFooter.init(refreshingBlock: {
    // 设置状态为空闲状态
    self.tableView.mj_footer?.state = .idle

    self.mCurrentPage += 1
    // 请求下拉数据
    if(self.mCurrentPage <= self.mCurrentCount){
      requestHttpData(page:self.mCurrentPage)
    }else{
      // 没有更多数据
      self.tableView.mj_footer?.state = .noMoreData
    }
})
// 立即进入刷新状态
self.tableView.mj_header?.beginRefreshing()

tips:

tableView 相当于 RecyclerView

虽然不懂IOS,但是看这段代码也应该知道是啥意思,就是类似androidRecyclerView下拉刷新和上拉加载的功能

所以,这段代码有什么特点呢 ?

放大这段代码来看细节:

// 立即进入刷新状态
self.tableView.mj_header?.beginRefreshing()

// 空闲状态
self->_tableView.mj_footer.state = MJRefreshStateIdle;

// 没有更多数据状态
self.tableView.mj_footer.state = MJRefreshStateNoMoreData;

从这段代码中,可以看出,是一个mj的大佬写的框架,因为他给tableView添加了域名[mj] 那么要想在kotlin中也实现这种效果,如何做到呢?

先来看最终完成的效果:

可以无限的扩展

完整代码
val String.szj: SZJStringExtImpl
    get() = SZJStringExtImpl.getInstance(this)
interface SZJ<T>

class SZJStringExtImpl private constructor(private val str: String) : SZJ<String> {
    companion object {
        @SuppressLint("StaticFieldLeak")
        private var instance: SZJStringExtImpl? = null

        @Synchronized
        fun getInstance(t: String): SZJStringExtImpl {
            if (instance == null) {
                instance = SZJStringExtImpl(t)
            }
            return instance ?: SZJStringExtImpl(t)
        }
    }

    fun getNumberLength() = let {
        str.filter {
            it in ('0'..'9')
        }.toList().size
    }

    fun getNotNumberLength() = let {
        str.filter {
            it !in ('0'..'9')
        }.toList().size
    }
}

代码很简单,但是一定会有一部分同学看到这个需求脑袋一懵,无从下手.

本篇代码量很少,只是分享一下其他平台一些好的东西 …

原创不易,您的点赞就是我最大的支持!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/990527.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存