swift3 0 中inout关键字

#swift有两种参数传递方式 #####1.值传递 值传递的是参数的一个副本,这样在调用参数的过程中不会影响原始数据。 #####2.指针传递 指针传递把参数本身引用(内存地址)传递过去,在调用的过程会影响原始数据

在Swift众多数据类型中,只有class是指针传递,其余的如Int,Float,Bool,Character,Array,Set,enum,struct全都是传递. 让值传递以指针方式传递 有时候我们需要通过一个函数改变函数外面变量的值(将一个值类型参数以引用方式传递),这时,Swift提供的inout关键字就可以实现。 ?1:

  var value = 50
  print(value)  // 此时value值为50

  func increment(value: inout Int, length: Int) {
    value += length
  }

  increment(value: &value,length: 22)
  print(value)  // 此时value值为72,成功改变了函数外部变量value的值
复制代码

?2:

class Circle{
lazy var area: Double = 0.0
var r:Double = 0.0 {
    willSet{
        print("有新值")
        area = Double.pi*newValue*newValue
    }
}
}
let circle = Circle()
  circle.r = 3
print(circle.r)
/// 执行结果:3
func calcalate(r:inout Double){
print("函数执行开始")
r = 2.0
print("函数执行结束")
}
calcalate(r: &circle.r)
print(circle.r)
/// 执行结果:2
复制代码

即:声明函数时,在参数前面用inout修饰,函数内部实现改变外部参数传入参数时(调用函数时),在变量名字前面用 & 符号修饰表示,表明这个变量在参数内部是可以被改变的(可将改变传递到原始数据) ###注意 inout修饰的参数是不能有默认值的,有范围的参数集合也不能被修饰; 一个参数一旦被inout修饰,就不能再被var和let修饰了。

1.监测属性,其实是给存储属性上添加的一种监测功能,willSet 监测新值,didSet 监测旧值 2.如果函数的参数是inout 修饰的,你如果将监测的属性传入这个函数的时候,此时会将属性的值拷贝一份,在函数结束的时候,将值重新付给属性,所以函数执行完毕后,会触发监测函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值