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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值