我之前使用Masonry布局时候经常需要设置偏移量,但是呢在设置布局哪里设置死数据不方便进行调试更换就想用一个变量。

我声明一个Struct储存一个试图的上,左,下,右的偏移量和宽度和高度。

public struct CWSize {
    public var top:CGFloat = 0
    public var leading:CGFloat = 0
    public var bottom:CGFloat = 0
    public var trailing:CGFloat = 0
    public var width:CGFloat = 0
    public var height:CGFloat = 0
    public var size:CGSize {
        return CGSize(width: width, height: height)
    }
}

我声明UIView的扩展

public extension UIView {
    
    public func cw_makeSize(_ block:(_ size: CWSize) -> Void) {
        let size = CWSize()
        block(size)
        objc_setAssociatedObject(self, "CWSize", size, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
    }
    
    public func cw_makeConstraints(_ block:(_ maker: ConstraintMaker, _ size: CWSize) -> Void) {
        guard let size = objc_getAssociatedObject(self, "CWSize") as? CWSize else {
            return
        }
        self.snp.makeConstraints { (maker) in
            block(maker,size)
        }
    }
}

看着没什么问题,但是在Xcode敲代码时候提示 Error Type就是死活不提示,很不方便。

view.cw_makeSize({ (size) in
    size
})

解决办法

我调用是在一个属性的懒加载的方法里面进行调用的会提示Error Type但是如果自己手动敲出来还是可以识别的

我在懒加载方法之外调用就可以完全的提示了,虽然解决了,但是在懒加载的初始化方法里面为什么不能提示暂时不知道什么原因