函数的基本用法

一个简单的函数,如下:

func sayHello(personName:String) -> String {

let s = "你好" + personName + "!"

return s

}

let s = sayHello("iOS")

print(s)

func关键字:用于标示,这是一个函数

函数名字:sayHello 应当清晰明了且符合驼峰规则编码规范

参数列表:(personName:String) personName是参数名,String是这个参数的类型

返回值:-> String 表示返回值是一个字符串类型

函数体:{ } 放置代码,即函数的执行代码

函数的参数

函数可以没有参数:

func sayHello() -> String {

return "你好!"

}

print(sayHello())

可以为函数设置多个参数,如:

func sayHello(personName personName:String, isMale isMale:Bool) -> String{

var s:String;

if ( isMale ) {

s = "你好" + personName + ",帅哥!"

}

else {

s = "你好" + personName + ",美女!"

}

return s

}

print(sayHello(personName: "iOS", isMale: true))

参数的名字:

内部参数名:该参数名只在函数的内部能够看到,如:

func sayHello(personName:String) -> String{

let s = "你好" + personName + "!"

return s

}

print(sayHello("iOS"))

外部参数名:该参数名还可以在函数的外部看到,如:

func sayHello(personName personName:String) -> String{

let s = "你好" + personName + "!"

return s

}

print(sayHello(personName: "iOS"))

第二个参数及后面的参数,无论第一个参数是否是外部参数,都是外部参数,如:

func sayHello(person1Name:String, person2Name:String) -> String {

let s = "你好 " + person1Name + " and " + person2Name + "!"

return s

}

print(sayHello("iOS", person2Name: "Android"))

后续的参数前添加 “_ "可以打破这一规则

func sayHello(person1Name:String, _ person2Name:String) -> String {

let s = "你好 " + person1Name + " and " + person2Name + "!"

return s

}

print(sayHello("iOS", "Android"))

带可变参数的函数,如:

func sum(numbers: Int ...) -> Int{

var total = 0;

for n in numbers {

total += n

}

return total

}

print(sum(1,2,3,4,5))

函数的默认参数,如:

func sayHello(personName personName:String, isMale:Bool = true) -> String{

var s:String;

if ( isMale ) {

s = "你好" + personName + ",帅哥!"

}

else {

s = "你好" + personName + ",美女!"

}

return s

}

//print(sayHello(personName: "iOS", isMale: true))

print(sayHello(personName: "iOS"))

函数的默认参数,要遵循从最右边开始的规则

函数的重载,如:

func sayHello(personName personName:String) ->String{

let s = "你好" + personName + "!"

return s

}

func sayHello(personName personName:String, isMale:Bool) -> String{

var s:String

if ( isMale ) {

s = "你好" + personName + ",帅哥!"

}

else {

s = "你好" + personName + ",美女!"

}

return s

}

print(sayHello(personName: "iPhone”)) // 你好iPhone!

print(sayHello(personName: "iOS", isMale: true)) // 你好iOS,帅哥!

函数重载的依据是:参数列表不同

但要注意函数在重载时,如果参数带默认值带来的歧义的情况

参数的可变性:

参数默认都是常量(let),在函数内不能进行修改

可以显式声明参数为变量(var),这样参数在函数内就可以被修改

func factorial(var number:Int) ->Int {

var result:Int = 1

while number > 1 {

result = result * number

number--

}

return result

}

print(factorial(6))

要注意:形参不能修改实参

形参修改实参的办法:

swift精心设计了inout关键字,用于声明形参是一个出参,实参使用&运算符

func mySwap(inout a:Int, inout b:Int) {

var tem:Int

tem = a

a = b

b = tem

}

var x1 = 10, x2 = 20

mySwap(&x1, b: &x2)

print("x1=\(x1) x2=\(x2)”) // x1=20 x2=10

注意:出参的实参必须是变量、出参不能带默认值、inout关键不能和let及var一期使用

函数的返回值

无返回值:

func mySwap(inout a:Int, inout b:Int) {

var tem:Int

tem = a

a = b

b = tem

}

var x1 = 10, x2 = 20

mySwap(&x1, b: &x2)

print("x1=\(x1) x2=\(x2)”) // x1=20 x2=10

一个返回值:

func factorial(var number:Int) ->Int {

var result:Int = 1

while number > 1 {

result = result * number

number--

}

return result

}

print(factorial(6))

多个返回值(元组):

func count(kids: Dictionary<String, String>) -> (girls:Int, boys:Int){

var girls = 0, boys = 0

for c in kids.values {

if c == "Girl" {

girls++

}

else if c == "Boy" {

boys++

}

}

return (girls, boys)

}

var k:Dictionary<String, String> = ["AAA":"Girl", "BBB":"Boy", "CCC":"Girl", "DDD":"Girl", "EEE":"Boy"]

var (g, b) = count(k)

print("girls=\(g) boys=\(b)")