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 ,但是看这段代码也应该知道是啥意思,就是类似android 中RecyclerView 下拉刷新和上拉加载的功能
所以,这段代码有什么特点呢 ?
放大这段代码来看细节:
// 立即进入刷新状态
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
}
}
代码很简单,但是一定会有一部分同学看到这个需求脑袋一懵,无从下手.
本篇代码量很少,只是分享一下其他平台一些好的东西 …
原创不易,您的点赞就是我最大的支持!
|