前言
SDAutoLayout是一个优秀的第三方自动布局库,之前提交了一个pr为其增加一个Swift extension。闲来无事更新了一下并重新提交了pr,希望能够被采纳。
存在的问题
之前的swift拓展使用方法如下:
1 | yourView.layout() |
可以看到,方法名layout()
容易重名,且方法调用不够swifty,也很难体现出使用的是SDAutolayout。
改进
1.声明一个swift类SDAutoLayout
。
1 | public final class SDAutoLayout<Base> { |
2.声明一个协议SDAutoLayoutCompatible
,为其添加一个只读的关联类型sd
。
1 | public protocol SDAutoLayoutCompatible { |
3.实现协议扩展,返回一个SDAutoLayout
对象
1 | public extension SDAutoLayoutCompatible { |
4.为UIView添加一个扩展,并遵守SDAutoLayoutCompatible
协议
1 | extension UIView: SDAutoLayoutCompatible { } |
凡是遵守这个协议SDAutoLayoutCompatible的类,便拥有了.sd
这个属性
5.在SDAutoLayout扩展中添加相应的方法
1 | extension SDAutoLayout where Base: UIView { |
UIView
通过遵守SDAutoLayoutCompatible
协议,为其添加了sd
属性,sd
本质就是SDAutoLayout
对象,这样UIView
可以通过点出sd
这个属性来调用SDAutoLayout
的实例方法。
改进后的使用示例
1 | // example: swifty 🎉🎉🎉 |
结尾
Swift 真香。