import ObjectiveC
private var xoTag: UInt = 0
extension ELCImagePickerController {
var tag: UInt {
get {
return (objc_getAssociatedObject(self, &xoTag) as? UInt)!
}
set(newValue) {
objc_setAssociatedObject(self, &xoTag, newValue, objc_AssociationPolicy(OBJC_ASSOCIATION_RETAIN))
}
}
}
private var middleNameKey :Void?
extension User {
var middleName :String? {
get {
return objc_getAssociatedObject( self , &middleNameKey) as ? String
}
set {
objc_setAssociatedObject( self , &middleNameKey, newValue, .OBJC_ASSOCIATION_COPY_NONATOMIC)
}
}
}
使用
let user =User()
user.middleName="jake"
print(user.middleName)
在Swift扩展中添加存储属性:一般而言,swift的扩展Extension只能添加计算属性,不能添加存储属性。当然,如果利用run time也可以实现extension添加存储属性的效果.
.如我给UIButton这个类添加了如下属性:
private var key: Void?
func createImageWithColor(_ color: UIColor) ->UIImage? {
let rect = CGRect(x: 0.0, y: 0.0, width: 1.0, height: 1.0)
UIGraphicsBeginImageContext(rect.size)
let context = UIGraphicsGetCurrentContext()
context?.setFillColor(color.cgColor)
context?.fill(rect)
let theImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return theImage
}
extension UIButton {
@IBInspectable var borderColor: UIColor? {
get {
return objc_getAssociatedObject(self, &key) as? UIColor
}
set(newValue) {
objc_setAssociatedObject(self, &key, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
layer.borderColor = borderColor?.cgColor
}
}
@IBInspectable var borderWidth: CGFloat? {
get {
return objc_getAssociatedObject(self, &key) as? CGFloat
}
set(newValue) {
objc_setAssociatedObject(self, &key, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
layer.borderWidth = borderWidth ?? 0
}
}
@IBInspectable var cornerRadius: CGFloat? {
get {
return objc_getAssociatedObject(self, &key) as? CGFloat
}
set(newValue) {
objc_setAssociatedObject(self, &key, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
layer.cornerRadius = cornerRadius ?? 0
layer.masksToBounds = cornerRadius != 0
}
}
@IBInspectable var normalColor: UIColor? {
get {
return objc_getAssociatedObject(self, &key) as? UIColor
}
set(newValue) {
objc_setAssociatedObject(self, &key, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
setBackGroundColor(normalColor ?? UIColor.white, state: UIControlState())
}
}
@IBInspectable var highlightedColor: UIColor? {
get {
return objc_getAssociatedObject(self, &key) as? UIColor
}
set(newValue) {
objc_setAssociatedObject(self, &key, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
setBackGroundColor(highlightedColor ?? UIColor.lightGray, state: .highlighted)
}
}
fileprivate func setBackGroundColor(_ backGroundColor: UIColor, state: UIControlState) {
let image = createImageWithColor(backGroundColor)
setBackgroundImage(image, for: state)
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)