Swift 扩展
2019-09-27 本文已影响0人
1剑天下
⚠️ 扩展可以向类型添加新功能,但不能覆盖现有功能。
- ✨✨ 扩展属性
- ✨✨ 扩展计算属性
- ✨✨ 扩展构造方法
- ✨✨ 扩展方法
- ✨✨ 使用扩展使某个类遵循一个协议
- ✨✨ 值类型的扩展
protocol extensionClassProtocol {
func protocolFunc()
}
class extensionClass:NSObject {
private var key: Void?
var name:String
var ageOld = 10
init(param1:String,params2:String)
{
name = param1
}
}
1. 扩展属性 扩展只能添加计算属性,可以通过runtime添加储存属性
extension extensionClass
{
var info:String?{
get{
return objc_getAssociatedObject(self, &key) as? String
}
set(newValue){
objc_setAssociatedObject(self, &key, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
}
}
}
2. 扩展构造方法
扩展可以向类添加新的便利构造器,但是它们不能向类添加新的指定构造器或析构器。指定构造器或析构器必须始终由原始类实现提供
extension extensionClass
{
convenience init(param3:String,params4:Int)
{
self.init(param1: param3,params2: "1")
}
}
3.扩展计算属性 (计算属性:通过其他属性计算而来)
extension extensionClass
{
var age:Int{
return self.ageOld+1
}
}
4. 扩展方法
extension extensionClass
{
//扩展实例方法
func myFunc(param:String) {
print(param)
}
// 扩展类方法
class func myClassFunc()
{
print("my class func for extension")
}
}
5. 使用扩展使某个类遵循一个协议
extension extensionClass:extensionClassProtocol
{
func protocolFunc() {
print("extensionClassProtocol for extension")
}
}
6.值类型的扩展
extension Int
{
//对值类型进行扩展时,可以使用mutating修饰方法,使得方法内部可以直接修改当前实例的本身
mutating func change(){
self = self*self
}
}