Swift - 31 - 常量参数, 变量参数和inout参数
//: Playground - noun: a place where people can play import UIKit // swift中默认情况下, 传入的参数是不可以修改的, 也就是let类型, 也就是常量参数 // 如果想修改这个参数的值, 需要在参数前加"var", 也就是变量参数 func toBinary(var num:Int) -> String // 将一个数转换为二进制 { var result = "" while num != 0 { result = String(num%2) + result num /= 2 } return result } var number = 69 toBinary(number) number // 输入结果还是69, 说明函数中对变量参数的修改, 不会影响外部变量本身 // 以下两个函数也证明了, 变量参数不会影响外部变量本身(包括数组和字典) var a = 1 func testChangeIntFunction(var a:Int) { a = 0 } testChangeIntFunction(a) a var arr = [2, 3] func testChangeIntFunction(var a:[Int]) { a = [3, 4] } testChangeIntFunction(arr) arr /*--------------------------------------------------------------------*/ // 那么如何实现在函数内改变外部变量本身呢? 这里就要使用到另外一个关键字"inout"了 // 这样可以理解为传入的是参数的指针(也就是内存地址) func changeEachOther(inout a:Int, inout b:Int) { let temp = a a = b b = temp } var x = 0, y = 100 print("x = \(x), y = \(y)") changeEachOther(&x, b: &y) print("x = \(x), y = \(y)") // swift自带的交换函数 // swap(&<#T##a: T##T#>, &<#T##b: T##T#>)