1.概念
在oc中为了增强已有类的功能,我们经常使用分类
。使用分类,我们可以在不破坏原有类的结构的前提下,对原有类进行模块化的扩展。
但是在swift中没有分类这种写法了。相对应的是swift中只有扩展(Extensions
)。
下面是swift中扩展(Extensions
)的说明:
扩展就是向一个已有的类、结构体、枚举类型或者协议类型添加新功能(functionality
)。这包括在没有权限获取原始源代码的情况下扩展类型的能力(即逆向建模)。扩展和 Objective-C 中的分类(categories
)类似。(不过与 Objective-C 不同的是,Swift 的扩展没有名字。)
2.对UIView的扩展
extension UIView {
// .x
public var x: CGFloat {
get {
return self.frame.origin.x
}
set {
var rect = self.frame
rect.origin.x = newValue
self.frame = rect
}
}
// .y
public var y: CGFloat {
get {
return self.frame.origin.y
}
set {
var rect = self.frame
rect.origin.y = newValue
self.frame = rect
}
}
// .maxX
public var maxX: CGFloat {
get {
return self.frame.maxX
}
}
// .maxY
public var maxY: CGFloat {
get {
return self.frame.maxY
}
}
// .centerX
public var centerX: CGFloat {
get {
return self.center.x
}
set {
self.center = CGPoint(x: newValue, y: self.center.y)
}
}
// .centerY
public var centerY: CGFloat {
get {
return self.center.y
}
set {
self.center = CGPoint(x: self.center.x, y: newValue)
}
}
// .width
public var width: CGFloat {
get {
return self.frame.size.width
}
set {
var rect = self.frame
rect.size.width = newValue
self.frame = rect
}
}
// .height
public var height: CGFloat {
get {
return self.frame.size.height
}
set {
var rect = self.frame
rect.size.height = newValue
self.frame = rect
}
}
}
使用:
let label = UILabel()
label.x
label.width
label.centerX
...
3.对UIColor的扩展
十六进制颜色转换为rgb
extension UIColor {
public func colorWithHex(rgb:Int, alpha: CGFloat) -> UIColor {
return UIColor(red: ((CGFloat)((rgb & 0xFF0000) >> 16))/255.0, green: ((CGFloat)((rgb & 0xFF00) >> 8))/255.0, blue: ((CGFloat)(rgb & 0xFF)) / 255.0, alpha: alpha)
}
// 红色
class var Red: UIColor {
return UIColor(red: 252/255.0, green: 106/255.0, blue: 125/255.0, alpha: 1.0)
}
// 灰色背景颜色
class var Gray: UIColor {
return UIColor(red: 242/255.0, green: 243/255.0, blue: 248/255.0, alpha: 1.0)
}
}
使用:
UIColor.clear.colorWithHex(rgb: 0x2588dd, alpha: 1.0)
UIColor.Red
UIColor.Gray