SDAutoLayout icon indicating copy to clipboard operation
SDAutoLayout copied to clipboard

更新SDAutoLayout的Swift扩展,使用Swifty风格的点语法实现SDAutoLayout布局

Open fanyuexiang opened this issue 5 years ago • 0 comments

before

extension UIView {
    @discardableResult
    public func layout() -> SDAutoLayoutModel {
        return sd_layout()
    }
}

// example:not swifty and the function name 'layout()' is easy to repeat
yourView.layout()
   .topTo(view, 10)
   .leftTo(view, 10)
   .width(is: 100)
   .height(is: 100)

now

public final class SDAutoLayout<Base> {
    public let base: Base
    public init(_ base: Base) {
        self.base = base
    }
}

public protocol SDAutoLayoutCompatible {
    associatedtype CompatibleType
    var sd: CompatibleType { get }
}

public extension SDAutoLayoutCompatible {
    var sd: SDAutoLayout<Self> {
        get { return SDAutoLayout(self) }
    }
}

extension UIView: SDAutoLayoutCompatible { }

extension SDAutoLayout where Base: UIView {
    @discardableResult
    public func layout() -> SDAutoLayoutModel {
        return base.sd_layout();
    }
}

// example:  swifty 🎉🎉🎉
yourView.sd.layout()
       .topTo(view, 10)
       .leftTo(view, 10)
       .width(is: 100)
       .height(is: 100)

fanyuexiang avatar Apr 23 '19 09:04 fanyuexiang