标签:swift 函数 fuc
1. swift 中函数是第上类型,所以函数也可以作为参数和返回结果
2. 定义形式 关键字 名字 (参数列表)-> 返回值类型。下面是一个返回元组的例子。
func addNumber(a:Int,b:Int) -> (addResult : Int, timesResult : Int) {
return(a+b, a*b)
}
let result = addNumber(1, 2)
println(result.addResult)传入两个参数 a,b 并把他们相加,相乘的结果以一个元组的形式指返回。可以没有参数,但是必须有代表参数的(),当没有返回值时,->到 { 前的都要省略。这里的没有返回值是指我们没有定义返回值,但是函数实际上会返回一个void值。它其实是一个空的元组,没有任何的元素,可以写成()
3. 函数的参数名称 :
就如我们上面所看到的函数形式,参数名称 a ,b 只是一个局部的变量,我们只能在自己定义的函 数内使用,不能在外部使用。
假设一个函数有多个参数,我们在使用时可能不知道这些参数的明确意思。这时我们可以使用外部参数名称来解决这个问题。
现在有一个函数要求传入三个函数,父母的身高以及来代码男女的1和2 来求子女的身高。如下:
func getPersonHeight(height1:Float,hieght2:Float,isBoy:Int) -> Float{
if isBoy == 1 {
return 45.99 + 0.78 * (height1+hieght2) / 2 + 5.29
} else {
return 37.85+0.75 * (height1+hieght2) / 2 + 5.29
}
}
当我们在别处使用的时候不会提示这三个数所表示的意思,可能会造成传值的错误。现在我们只需要使用参数的外部名称,在调用时也能明确的标明它们的所代表的意思。 参数的外部名称加在局部名称前面,用空格割开。
func getPersonHeight(height1:Float,hieght2:Float,isBoy:Int) -> Float{
if isBoy == 1 {
return 45.99 + 0.78 * (height1+hieght2) / 2 + 5.29
} else {
return 37.85+0.75 * (height1+hieght2) / 2 + 5.29
}
}let height = getPersonHeight( 170, 180,1);
当调用有外部名称时的代码
let height = getPersonHeight(motehrHeight: 170, fatherHeight: 180, oneIsBoy:1);
有外部名称是更加清晰。而且我们可以简写外部参数名。假如我们已经定义了如下函数
func getPersonHeight(motherHeight:Float, fatherHieght:Float, oneIsBoy:Int) -> Float
我们的局部函数名已经相当明确了,这时我们只需要在其前面加上 # ,就可以当作外部参数名来使用
func getPersonHeight( # motherHeight:Float, # fatherHieght:Float, # oneIsBoy:Int) -> Float{
if oneIsBoy == 1 {
return 45.99 + 0.78 * (motherHeight+fatherHieght) / 2 + 5.29
} else {
return 37.85+0.75 * (motherHeight+fatherHieght) / 2 + 5.29
}
}
let height = getPersonHeight(motherHeight: 170, fatherHieght: 190, oneIsBoy: 1)
println(height)
func getPersonHeight(motherHeight:Float,fatherHieght:Float, oneIsBoy:Int = 1) -> Float{
if oneIsBoy == 1 {
return 45.99 + 0.78 * (motherHeight+fatherHieght) / 2 + 5.29
} else {
return 37.85+0.75 * (motherHeight+fatherHieght) / 2 + 5.29
}
}当我们调用的时候会发现,系统会给有默认值的参数加一个外部名称 :
let height = getPersonHeight(170, 180, oneIsBoy: 2)
不给参数赋值时: let height = getPersonHeight(170, 180)
注意: 默认参数必须放在所有参数的最右边,否则会造成调用混乱。
5.可变参数 : 在对数类型后面加 ... 直接看代码 ,求 N 个整数的和
func sumOfSomeNumbers(numbers:Int...) -> Int {
var sum: Int = 0
for item in numbers {
sum += item
}
return sum
}
println(sumOfSomeNumbers(1,2,3,4,5))注意:可变参数必须放在最右面,当同时默认参数也存在时,可变参数放在最后。
6.输入输出参数:
swif 中参数的传递是值传递,函数内部对参数的修改只发生在函数内部,函数的外边参数是不会发生改变的。如果想要改变传入的参数,我们就需要输入输出参数了,这样的参数在函数内部的改这会保持到函数的外部。 输入输出只需要在 参数名称前加上inout。
func inoutTest(var number: Int) {
number -= 1;
}
var number = 3;
inoutTest(number)
println(number)输出的值 为 3
下面使用 输入输出函数,输入输出参数调用时要在参数前面加上 &
func inoutTest(inout number: Int) {
number -= 1;
}
var number = 3;
inoutTest(&number)
println(number)注意: 输入输出参数不能有默认值,而且可变参数不能用 inout 标记。如果你用 inout 标记一个参数,这个参数不能被 var 或者 let 标记。
7.函数的类型
在swift 中函数属于第一类型,所以有自己的类型,函数的类型由参数的类型跟返回值的类型决定。
func addTwoInts(a: Int, b: Int) -> Int {
return a + b
}
var addIntsFunc : (Int,Int) -> (Int) = addTwoInts
2. 函数当作参数传递,这时函数的类型显得特别有用。
func addTwoNumber(addFunction:(Int,Int)->(Int), number1:Int, number2:Int) ->Int {
return addFunction(number1,number2)
}
func addTwoInt(number1:Int, number2:Int) -> Int {
return number2 + number1;
}
<pre name="code" class="plain"> func addTwoInt(number1: Int,number2: Int) -> Int {
return number1 + number2;
}
func timesTwoInt(number1: Int,number2: Int) -> Int {
return number1 * number2
}
func chooseStepFunction(isAdd: Bool) -> (Int,Int) -> Int {
return isAdd ? addTwoInt: timesTwoInt;
}
let function:(Int,Int)->(Int) = chooseStepFunction(false)
println(function(1,2))
3. 函数当作返回值.我们现在定义一个函数,以一个bool 值作为参数,然后返回一个(Int,Int) ->(Int)的函数。代码
func addTwoInt(number1: Int,number2: Int) -> Int {
return number1 + number2;
}
func timesTwoInt(number1: Int,number2: Int) -> Int {
return number1 * number2
}
func chooseCaculateFunction(isAdd: Bool) -> (Int,Int) -> Int {
return isAdd ? addTwoInt: timesTwoInt;
}
let function:(Int,Int)->(Int) = chooseCaculateFunction(false)
println(function(1,2))
5.
标签:swift 函数 fuc
原文地址:http://blog.csdn.net/barryclass/article/details/40429965