         return self
     }
     
-    private func setProperty<T>(param: Data<T>, value: T, state: ButtonStyleKit.ButtonState) {
+    private func setProperty<T>(param: Property<T>, value: T, state: ButtonStyleKit.ButtonState) {
         switch state {
         case .all:
             param.normal = value

        build()
    }
    
    private func attachProperty<T>(param: Data<T>, state: ButtonStyleKit.ButtonState) -> T? {
        switch state {
        case .all:
            return nil
        case .normal:
            return param.normal
        case .highlighted:
            return param.highlighted
        case .selected:
            return param.selected
        case .disabled:
            return param.disabled
        }
    }
}

    
    // Appear
    public func build() {
        if let font = attachProperty(font, state: state) {
            button.titleLabel?.font = font
        }
        
        if let borderWidth = attachProperty(borderWidth, state: state) {
            button.layer.borderWidth = borderWidth
        }
        
        if let borderColor = attachProperty(borderColor, state: state) {
            button.layer.borderColor = borderColor.cgColor
        }
        
        if let cornerRadius = attachProperty(cornerRadius, state: state) {
            button.layer.cornerRadius = cornerRadius
        }
        
        if let opacity = attachProperty(opacity, state: state) {
            button.layer.opacity = opacity
        }
        
        if let backgroundColor = attachProperty(backgroundColor, state: state) {
            button.layer.backgroundColor = backgroundColor.cgColor
        }
        
        if let tintColor = attachProperty(tintColor, state: state) {
            button.tintColor = tintColor
        }
        
        if let shadowColor = attachProperty(shadowColor, state: state) {
            button.layer.shadowColor = shadowColor.cgColor
        }
        
        if let shadowOpacity = attachProperty(shadowOpacity, state: state) {
            button.layer.shadowOpacity = shadowOpacity
        }
        
        if let shadowOffset = attachProperty(shadowOffset, state: state) {
            button.layer.shadowOffset = shadowOffset
        }
        
        if let shadowRadius = attachProperty(shadowRadius, state: state) {
            button.layer.shadowRadius = shadowRadius
        }
        
        if let shadowPath = attachProperty(shadowPath, state: state) {
            button.layer.shadowPath = shadowPath
        }
        
        if let clipsToBounds = attachProperty(clipsToBounds, state: state) {
            button.clipsToBounds = clipsToBounds
        }
        
        if let masksToBounds = attachProperty(masksToBounds, state: state) {
            button.layer.masksToBounds = masksToBounds
        }
        
        if let isExclusiveTouch = attachProperty(isExclusiveTouch, state: state) {
            button.isExclusiveTouch = isExclusiveTouch
        }
        
        if let contentHorizontalAlignment = attachProperty(contentHorizontalAlignment, state: state) {
            button.contentHorizontalAlignment = contentHorizontalAlignment
        }
        
        if let contentVerticalAlignment = attachProperty(contentVerticalAlignment, state: state) {
            button.contentVerticalAlignment = contentVerticalAlignment
        }
        
        if let titleEdgeInsets = attachProperty(titleEdgeInsets, state: state) {
            button.titleEdgeInsets = titleEdgeInsets
        }
        
        if let contentEdgeInsets = attachProperty(contentEdgeInsets, state: state) {
            button.contentEdgeInsets = contentEdgeInsets
        }
        
        if let imageEdgeInsets = attachProperty(imageEdgeInsets, state: state) {
            button.imageEdgeInsets = imageEdgeInsets
        }
        
        if let reversesTitleShadowWhenHighlighted = attachProperty(reversesTitleShadowWhenHighlighted, state: state) {
            button.reversesTitleShadowWhenHighlighted = reversesTitleShadowWhenHighlighted
        }
        
        if let adjustsImageWhenHighlighted = attachProperty(adjustsImageWhenHighlighted, state: state) {
            button.adjustsImageWhenHighlighted = adjustsImageWhenHighlighted
        }
        
        if let adjustsImageWhenDisabled = attachProperty(adjustsImageWhenDisabled, state: state) {
            button.adjustsImageWhenDisabled = adjustsImageWhenDisabled
        }
        
        if let showsTouchWhenHighlighted = attachProperty(showsTouchWhenHighlighted, state: state) {
            button.showsTouchWhenHighlighted = showsTouchWhenHighlighted
        }
    }
