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#>)

  

posted @ 2015-12-17 14:17  Rinpe  阅读(588)  评论(0编辑  收藏  举报