swift3.0函数语法 参数 var去掉. 以及inout位置变化

最近在看个洗牌算法.想用swift 来写.
在playground环境下


func getRandomByQuJian(startIndex:Int, endIndex:Int)->Int {
    let  index2 = Int(arc4random_uniform(UInt32(endIndex - startIndex)) + UInt32(startIndex))
    return index2
}
var nameArr = [2, 4, 45, 44]

func getRandomByArr(arrValue:[Int]){
//    遍历每个数据源
    print("arrValue:\(arrValue)")
     for i in 0..<arrValue.count {
        var  index1:Int = getRandomByQuJian(startIndex:i,endIndex:arrValue.count-1)

        (arrValue[i], arrValue[index1]) = (arrValue[index1], arrValue[i])
        //查看当前位置
        print( i,index1)
        print(nameArr)
     }
}
print("值:\(getRandomByArr(arrValue:nameArr)) ")
报错:
Playground execution failed: error: MyPlayground.playground:20:41: error: cannot assign to immutable expression of type '(Int, Int)'
        (arrValue[i], arrValue[index1]) = (arrValue[index1], arrValue[i])
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^

swift2.0 :
func getRandomByArr(var arrValue:[Int]){
….
}
但是在3.0 已经报错了.自己查阅了好久文档,这样来处理

func getRandomByQuJian(startIndex:Int, endIndex:Int)->Int {
    let  index2 = Int(arc4random_uniform(UInt32(endIndex - startIndex)) + UInt32(startIndex))
    return index2
}
var nameArr = [2, 4, 45, 44]

func getRandomByArr(arrValue:[Int]){
//    遍历每个数据源
    print("arrValue:\(arrValue)")
    var arrValue = arrValue;

     for i in 0..<arrValue.count {
        var  index1:Int = getRandomByQuJian(startIndex:i,endIndex:arrValue.count-1)

        (arrValue[i], arrValue[index1]) = (arrValue[index1], arrValue[i])

        //查看当前位置
        print( i,index1)
        print(nameArr)
     }
}
print("值:\(getRandomByArr(arrValue:nameArr)) ")

中间要加个转义的代码:
var arrValue = arrValue;

方法二: 使用地址
inout 来修饰.和swift2.0 比较inout的位置发生了变化

“Swift编程语言中引入了一种输入输出形参(in-out parameters),使得该形参的值不仅能被修改,而且还能影响它所对应的实参值。这种机制乍一看很像C语言中的指针传参,更像C++中的传引用,但是Swift中的输入输出形参机制与传统面向对象编程语言中传引用的方式有所不同。”

1、当函数在调用前,先将实参的值拷贝到所对应的输入输出形参中。
2、在执行函数中的代码时,对输入输出形参的值进行修改。
3、在函数返回之后,将修改后输入输出形参的值拷贝回对应的实参中。


func getRandomByQuJian(startIndex:Int, endIndex:Int)->Int {
    let  index2 = Int(arc4random_uniform(UInt32(endIndex - startIndex)) + UInt32(startIndex))
    return index2
}
var nameArr = [2, 4, 45, 44]

func getRandomByArr(arrValue:inout [Int]){
//    遍历每个数据源
    print("arrValue:\(arrValue)")
//    var arrValue = arrValue;

     for i in 0..<arrValue.count {
        let  index1:Int = getRandomByQuJian(startIndex:i,endIndex:arrValue.count-1)

        (arrValue[i], arrValue[index1]) = (arrValue[index1], arrValue[i])

        //查看当前位置
        print( i,index1)
        print(nameArr)
     }
}
print("值:\(getRandomByArr(arrValue: &nameArr)) ")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值