YSExt
Swift常用类扩展
环境
swift5.0、iOS11.0
安装使用
1、导入框架
pod 'YSExt'
2、导入命名空间
import YSExt
简单介绍
tips
类扩展属性、对象扩展属性,均以 ys. 或 ysXXX. 开头;
扩展方法都以 ys 或 ys_开头;
都特别简单,可以直接点进头文件进行查看,也可直接把项目 clone 下来进行查看。
注意
对象的对象扩展属性不要在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和空白占位视图的相同
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、字符串的操作、日期的操作及其他基本数据类型的扩展,这里不再一一列举,都特别简单,直接查看头文件、或把项目clone下来研究就好。