YSExt 1.1.9

YSExt 1.1.9

Maintained by ys.



YSExt 1.1.9

  • By
  • ys

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下来研究就好。