android kotlin扩展添加域名

Posted android超级兵

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android kotlin扩展添加域名相关的知识,希望对你有一定的参考价值。

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
    

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

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

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

以上是关于android kotlin扩展添加域名的主要内容,如果未能解决你的问题,请参考以下文章

kotlin编《第一行代码》

Android@Kotlin扩展变量与其它技巧

Android@Kotlin扩展变量与其它技巧

Kotlin NullPointer Exception Android [关闭]

Kotlin 继续助力 Android 开发,并计划涉足更多领域

Kotlin的android扩展:对findViewById说再见(KAD 04)