Swift基础 扩展

扩展

关键字extension,扩展的目的就是衍生原来没有的功能,可以扩展属性、方法、索引。并且可以在没有获得原始代码的情况下扩展。在oc中是以runtime来实现动态调用和添加功能的。

现有的类、结构体、枚举可以在扩展的方式下添加方法,但重写的方法不能使用扩展。

属性扩展

extension Double{
    
    
    var q:Double{
    
    return self/1000}
    var w:Double{
    
    return self/10000}
}

override func viewDidLoad() {
    
    
        super.viewDidLoad()
        
        var xiaoMing = Student()
        var xiaoHong = Student()
        xiaoMing.name = "xiaoMing"
        xiaoHong.name = "xiaoHong"
        xiaoMing.balance = 900
        xiaoHong.balance = 10200

        print("xiaoMing余额:\(xiaoMing.balance.q)千\nxiaoHong余额:\(xiaoHong.balance.w)万")
}

方法扩展

使用方法扩展需要用到extension和mutating两个关键字。
mutating的意思是改变,如果不加这个关键字是不允许对自身的值self进行修改的,只有加上mutating,下方的方法lifang3()才成立,因为lifang3()对self的值进行了修改。
不过不修改self的值,其扩展方法中的mutating可以不加。如下方案例的lifang3return()。

extension Double{
    
    
    var pingfang2:Double{
    
    
        return self*self
    }
    mutating func lifang3() {
    
    
        self = self*self*self
    }
    func lifang3return() -> Double {
    
    
        return self*self*self
    }
}

    override func viewDidLoad() {
    
    
        super.viewDidLoad()
        
        var doubleObject = 1.1
        print("doubleObject原来的值:\(doubleObject)")
        print("doubleObject调用属性拓展的值:\(doubleObject.pingfang2)")
        doubleObject.lifang3()
        print("doubleObject调用自赋值方法拓展的值:\(doubleObject)")
        print("doubleObject调用自赋值方法拓展带返回的值:\(doubleObject.lifang3return())")
        print("doubleObject和原来的值已经不同了:\(doubleObject)")
}

运行结果:

doubleObject原来的值:1.1
doubleObject调用属性拓展的值:1.2100000000000002
doubleObject调用自赋值方法拓展的值:1.3310000000000004
doubleObject调用自赋值方法拓展带返回的值:2.357947691000002
doubleObject和原来的值已经不同了:1.3310000000000004

猜你喜欢

转载自blog.csdn.net/kkkenty/article/details/124607133