Swift 函数从 func 关键字开始,然后是函数名,然后{}
。函数的所有主体——都放在大括号内。
// 创建函数
func printHelp() {
let message = """
Welcome to MyApp!
Run this app inside a directory of images and
MyApp will resize them all into thumbnails
"""
print(message)
}
// 调用函数printHelp
printHelp()
函数接收参数,比如内置的print
函数,参数定义数据类型表示接收的参数类型。
print("hello world") // hello world即为参数
创建函数打印平方值
func square(number: Int) {
print(number * number)
}
// Int 表示参数只接受Int类型
square(number: 8) // 64
除了接收数据,函数还可以返回数据。通过-> <数据类型>
告诉 swift 将返回什么数据类型的值。
func square(number: Int) -> Int {
return number * number
}
// -> Int 表示将返回Int类型的值
let result = square(number: 8)
print(result) // 64
每一个函数的形式参数都包含形式参数标签和形式参数名两部分
_
//这里的info1和info2就是形式参数标签
//name和age是形式参数名称
func personalInfo(info1 name : String, info2 age : Int) { //在函数的实现中使用形式参数名称 print("姓名:(name),年龄:(age)")
}
//在函数调用的时候使用形式参数标签
personalInfo(info1: "norman", info2: 23)
//下面是默认写法
//此时,name和age既是形式参数标签,也是形式参数名称
func personalInfo(name : String, age : Int) { //在函数内部实现的时候,name和age是形式参数名称 print("姓名:(name),年龄:(age)")
}
//在函数调用的时候,name和age是形式参数标签
personalInfo(name: "norman", age: 24)
//如果不想要形式参数标签,可以在形式参数名称前面加 _
func personalInfo(_ name : String, _ age : Int) { print("姓名:(name),年龄:(age)")
}
//在函数调用的时候,没有形式参数标签
personalInfo("norman", 24)
swift 允许设置参数默认值,如:
func greet(_ person: String, nicely: Bool = true) {
if nicely == true {
print("Hello, \(person)!")
} else {
print("Oh no, it's \(person) again...")
}
}
// 调用
greet("Taylor")
greet("Taylor", nicely: false)
当参数不确定,或者参数有多个,在类型后使用...
,swift 会将传入的值转换为数组,因此可以在函数内部使用循环语句处理。如:
func square(numbers: Int...) {
for number in numbers {
print("\(number) squared is \(number * number)")
}
}
square(numbers: 1, 2, 3, 4, 5)
一般默认在函数中定义的参数都是常量参数,也就是这个参数你只可以查询使用,不能改变它的值。
如果想要声明一个变量参数,可以在参数定义前加 inout 关键字,这样就可以改变这个参数的值了。
比如,如果你想将一个数字翻倍——即直接更改值,而不是返回一个新的值——你可以写一个这样的函数:
func doubleInPlace(number: inout Int) {
number *= 2
}
var myNum = 10
doubleInPlace(number: &myNum)
使用do/try/catch
方式优雅的处理程序运行错误。
do{
try checkPassword("password")
}catch{
print("error")
}
通常参数传递的值在函数内部不可更改,在swift
中可通过inout
更改。
func doubleInPlace(number: inout Int){
number*=2
}
使用方式:
var myNum = 10
doubleInPlace(number: &myum)