import Foundation
//实现一个函数 交换函数外面的两个变量的值
/*
func swap(a:Int,b:Int) {
//a = 1
// a b是常量
}*/
//变量参数
func mySwap(var a:Int, var b:Int) {
//这样交换的是mySwap内部 a 和b的值 交换不了函数外面的x y
let tmp = a
a = b
b = tmp
}
var x = 3
var y = 5
print("x = \(x) y = \(y)")
mySwap(x, b: y)
print("swap_x = \(x) y = \(y)")
//C语言 函数外面的变量需要传变量地址
//但是swift 是没有指针语法的 那么需要通过inout 参数来解决
//inout 内部外部参数 修饰的参数 实际操作是函数外面传进来的变量
//和c++ 引用语法很像
func mySwap2(inout a:Int, inout b:Int) {
//a 实际上操作的是 函数外部传进来得变量
let tmp = a
a = b
b = tmp
}
print("x = \(x) y = \(y)")
//把 x 和y 传入 函数mySwap2
mySwap2(&x, b: &y)//内部外部参数 类型 传参时 需要加&
print("swap_x = \(x) y = \(y)")
var num = 100
//实现一个函数 把num 置为0
//swift中 函数内部修改函数外面的变量需要 通过inout 修饰参数
func changeZeroNum(inout a:Int) {
a = 0
}
changeZeroNum(&num)
print(num)
import Foundation
//变参函数
//
//1.可以传一个数组 就相当于变参
//func sumOfNum(a:Int,arr:Array<Int>)
func sumOfNum(a:Int,arr:[Int])->Int {
print("a:\(a)")
var sum = 0
for i in arr {
sum += i
}
return sum
}
var s = sumOfNum(100, arr: [1,2,3,4,5,6])
print("s = \(s)")
//2.swift 自带的变参
//变参参数只能作为最后一个参数
func sumOfNum(arr:Int ...) ->Int {
//Int ...就是一个变参类型 在函数内部 实际上arr 就是一个数组类型
//可以把arr 按照数组操作
var sum = 0
for i in arr {
sum += i
}
return sum
}
//调用变参函数的写法
var s2 = sumOfNum(1,2,3,4,5,6) //直接写多个参数
print("s2 = \(s2)")
//swift 中的函数类型 通过函数类型 调用 函数
//C语言中 调用函数 可以通过函数指针的形式
//只需要知道函数的地址 就可以调用函数
//加法函数
func add(a:Int,b:Int)->Int {
return a+b
}
//减法函数
func sub(a:Int,b:Int)->Int {
return a-b
}
//调用 函数 只需要知道函数的类型 定义一个函数类型的变量或者常量 就可以调用
//定义一个函数类型的变量
//把一个函数名给 相应函数类型的变量
//这个和C语言中的函数指针/函数地址类似
var calc:(Int,Int)->Int = add
//通过calc 调用add
print(calc(1,2)) //1+2
//调用sub
calc = sub
print(calc(1,2)) //1-2