YSExt
Swift常用类扩展
环境
swift5.0、iOS11.0
安装使用
1、导入框架
pod 'YSExt'
2、导入命名空间
import YSExt
简单介绍
技巧
类扩展属性、对象扩展属性,均以 ys. 或 ysXXX. 开头;
扩展方法都以 ys 或 ys_开头;
都特别简单,可以直接进入头文件查看,也可以直接将项目克隆下来进行查看。
注意
对象的对象扩展属性不要在 deinit 中使用,因为它是 weak 修饰的,否则会引起闪退。
创建对象的快捷方法
仅UIView和UIScrollView比较特殊,因为它们是其他类的基类,其他都是ys。
Bundle.ys.create
CGRect.ys.create
UIAlertAction.ys.create
UIBarButtonItem.ys.create
UIButton.ys.create
UICollectionView.ys.create
UICollectionView.ys.createCell
UICollectionView.ys.createHeader
UICollectionView.ys.createFooter
UIColor.ys.create
UIDatePicker.ys.create
UIImage.ys.create
UIImageView.ys.create
UILabel.ys.create
UIPasteboard.ys.create
UIProgressView.ys.create
UIScrollView.ysScrollV.create
UISwitch.ys.create
UITableView.ys.create
UITableView.ys.createCell
UITableView.ys.createHeaderFooter
UITextField.ys.create
UIView.ysView.create
URL.ys.create
then语法
感谢devxoul大神的贡献,then语法糖是基于devxoul大神的Then库转变而来的,详见:https://github.com/devxoul/Then。
// class的then语法糖:设置自身属性、或对自身操作,返回自己
// 默认NSObject遵守了Then协议
extension NSObject: Then{}
private lazy var testV:UIView = UIView().then{ $0.backgroundColor = UIColor.white }
// 如果自定义的类要想实现then语法糖,只需要遵守Then协议即可
class ViewController: UIViewController {
private lazy var dog:Dog = Dog().then{ $0.name = "辛巴" }
}
class Dog {
var name = ""
}
// 遵守Then协议
extension Dog: Then{}
提供一些常用类方法或属性
// 通知
NotificationCenter.ys
// 本地push
UNUserNotificationCenter.ys
// 偏好设置
UserDefaults.ys
// 屏幕相关与一些布局常量
UIScreen.ys
// 系统与应用相关
UIApplication.ys
// 本地化
Locale.ys
// 日历本地化
Calendar.ys
UITableView、UICollectionView占位视图
因为UITableView、UICollectionView占位视图的用法完全一样,这里仅以UITableView为例进行说明,UICollectionView参照表格进行即可。
这里提供了4种类型:加载中(loading)、无数据(noData)、需要登录(signIn)、网络错误(networkError)。
1、自定义空白占位视图:继承自PHV_loading、PHV_noData、PHV_signIn、PHV_networkError,或直接继承自PHV_base。其中:前4个基类只继承自PHV_base,没有做其他任何操作。
class ProjectPHV_noData: PHV_noData {
override func setupChildView() {
// 在这里设置空白视图的UI,不用调用super.setupChildView(),当然调用也没事,父类只是提供了一个空方法
// 直接布局
}
}
2、创建tableView时,注意传入的frame和空白占位视图的frame相同
private lazy var phV_noData:ProjectPHV_noData = ProjectPHV_noData(superViewInitBounds: CGRect.ys.createScrollVInit(), initShow: false)
private lazy var contentTBV:UITableView = {
let tbv = UITableView(frame: CGRect.tbv_init)
// 设置空白占位视图
tbv.ysPlaceholderView.loadingV = xx
tbv.ysPlaceholderView.noDataV = phV_noData
tbv.ysPlaceholderView.signInV = xx
tbv.ysPlaceholderView.networkErrorV = xx
return tbv
}
3、手动控制“显示/隐藏”空白占位视图
self.contentTBV.ysPlaceholderView.showPHV(.noData)
self.contentTBV.ysPlaceholderView.hidePHV()
4、最常用的控制“显示/隐藏”空白占位视图
// 刷新后判断是否应该显示phV
self.contentTBV.ysPlaceholderView.phV_reloadData(.noData)
// 在不刷新的情况下判断是否应该显示phV
self.contentTBV.ysPlaceholderView.phV_withoutReloadData(.noData)
// 刷新后隐藏phV
self.contentTBV.ysPlaceholderView.phV_reloadData_hide()
// 刷新后判断是否应该显示phV,回调参数为 tableView 是否有数据
self.contentTBV.ysPlaceholderView.phV_reloadData(.noData) { (hasData) in
}
// 在不刷新的情况下判断是否应该显示phV,回调参数为 tableView 是否有数据
self.contentTBV.ysPlaceholderView.phV_withoutReloadData(.noData) { (hasData) in
}
其他
除此之外,还提供了常用UI控件、vc控制器、webView、字符串的操作、日期的操作及其他基本数据类型的扩展,这里不再一一列举,都特别简单,直接查看头文件、或把项目克隆下来研究即可。