swift3.0函数语法 参数 var去掉. 以及inout位置变化
来源:互联网 发布:郑州淘宝网店加盟查封 编辑:程序博客网 时间:2024/06/06 18:02
最近在看个洗牌算法.想用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)) ")
阅读全文
1 0
- swift3.0函数语法 参数 var去掉. 以及inout位置变化
- Swift3.0语法变化
- swift3.0语法变化
- [iOS Swift3.0语法变化] 方便查询
- Swift3.0相对于2.3语法的一些变化
- swift3.0 gcd 变化
- swift3.0变化
- swift3.0 gcd 变化
- swift3.0的变化
- Swift3.0 语法总结
- swift3.0 语法
- Swift3.0 去掉C风格
- 存储过程参数in、out以及inout的区别
- Swift2到Swift3语法变化不完整总结
- CGBitmapContextCreate函数参数详解 以及在 ios7下变化
- swift3.0下闭包语法汇总
- Swift3.0基本语法02
- Swift3.0基本语法01
- 文章标题
- 多核CPU上python多线程并行的一个假象
- 展会客流统计的客流统计系统,WiFi客流每时每客
- 一分钟学会 ConstraintLayout 之从属性角度理解布局
- uploadify多图片上传(flash版本)
- swift3.0函数语法 参数 var去掉. 以及inout位置变化
- <C# 6.0 & .NET 4.6 Framework>
- 期末考试(优先队列)
- Android Wi-Fi源码分析之wpa_supplicant初始化(四):wpa_supplicant_init_iface函数分析
- js 多态实现
- 455. Assign Cookies
- 面向对象设计原则之七--合成复用原则
- High DPI Settings in Windows
- 如何获取域名(网址)对应的IP地址