作者:Loving_iOS
转载请标明出处:http://blog.youkuaiyun.com/loving_ios/article/details/49365233本次讲解的开发环境为Xcode7.0.1 创建playground文件,进行的代码编写。
//***********************函数*************************
/*
函数 语法格式: func 函数名(参数列表)—>返回值类型{
函数实现...
}
*/
// 无参 无返回值
func func1() {
print("hello")
}
func func2() -> Void {
print("hello")
} // 和上面等价
// 函数调用
func1()
func2()
// 有参
// 1.关于内部参数名 只在函数作用域内部使用
func func3(name:String, age:Int) {
print("name= \(name) age = \(age)")
}
// func3(<#T##name: String##String#>, age: <#T##Int#>) 除了第一个参数 其他参数 在调用时会自动生成 与参数名相同的外部参数名
// 原则上在定义函数时第一个参数的外部变量名应该写在函数名后面 如:
//func func3Name(name:String, age:Int)
func3("Bob", age: 18)
// 除了上面的方式外 函数参数的外部参数名可以自己添加 添加规则: 在内部参数名前面添加 用空格隔开
func func4(mingzi name:String, nianling age:Int) {
print("name= \(name) age = \(age)")
}
func4(mingzi: "Tom", nianling: 20)
// 使用占位符 _省略掉外部参数名
func func5(name:String, _ age:Int) {
print("name= \(name) age = \(age)")
}
func5("john", 20)
// 可以给函数的参数赋初值
func func6(name:String = "jack", age:Int = 12) {
print("name= \(name) age = \(age)")
}
// 在调用时注意
//1.不传参数则使用初值
// func6()
// 2.传一个参数则替换掉第一个参数的初值
//func6("mary")
// 3.可以指定修改那个参数
func6(age: 20)
// 有返回值的时候
func func7() -> String {
return "你好"
}
func7()
// 不确定参数个数
func func8(numbers:Int...) -> Int {
var sum = 0
for number in numbers {
sum += number
}
return sum
}
func8(2, 4, 5)
// 参数在函数体内默认是不变的 用var修饰后可变
func func9(var num1:Int, num2:Int) -> Int {
num1 += num2
return num1
}
func9(1, num2: 3)
// inout修饰参数 将外部变量的地址传过来 从而改变外部变量的值
func func10(inout num:Int) {
num++
}
var number2 = 10
func10(&number2)
number2
// 练习:给一个字符串返回元音和辅音的个数
func count(tempString:String) -> (Int, Int) {
var num1 = 0
var num2 = 0
for charStr in tempString.characters {
switch charStr
{
case "a", "e", "i", "o", "u":
num1++
default:
num2++
}
}
return (num1, num2)
}
count("hfejflekf")
// 函数嵌套:函数作用域内定义了另外一个函数 内层函数的作用域内可以使用外层函数的参数
func function(var number:Int) {
number++
func function1() {
number++
}
function1()
number
}
function(3)
// 返回类型为函数类型
func function2() -> ((Int)->String) {
func hanshu(num:Int) -> String {
return "num = \(num)"
}
return hanshu // 只写返回的函数名
}
let hanshu = function2()
hanshu(2)
//练习: 声明一个函数 实现功能:传入“+”“-”“*”“/”字符串返回对应运算函数:如传入"+" 返回 int + int = int
// 方法一:
func operators(str:String) -> ((Int, Int) -> Int)? {
func add(num1:Int, num2:Int) ->Int {
return num1 + num2
}
func minus(num1:Int, num2:Int) ->Int {
return num1 - num2
}
func mult(num1:Int, num2:Int) ->Int {
return num1 * num2
}
func div(num1:Int, num2:Int) ->Int {
return num1 / num2
}
switch str
{
case "+":
return add
case "-":
return minus
case "*":
return mult
case "/":
return div
default:
return nil
}
}
let addFunction = operators("+")
addFunction!(2, 3) // 使用可选类型 使用时要解包
let minusFunction = operators("-")
minusFunction!(3, 2)
let multFunction = operators("*")
multFunction!(2, 3)
let divFuncton = operators("/")
divFuncton!(3, 2)
// 方法二:
func operations(str:String) -> ((Int, Int) ->Int)? {
func operation(num1:Int, num2:Int) -> Int {
switch str
{
case "+":
return num1 + num2
case "-":
return num1 - num2
case "*":
return num1 * num2
case "/":
return num1 / num2
default:
return 0
}
}
return operation
}
// 方法一和方法二的运算结果没有区别 注意:函数返回值为函数时可以用函数嵌套实现,但不是必须使用函数嵌套。方法一可以将内层函数放在外面一样可以,因为内层的函数没有使用外层函数的参数,而方法二必须嵌套,因为内层函数用了外层函数的参数
// 可以给函数类型起别名
typealias funcType = (Int, Int) ->Int
func function3() -> funcType {
func function(num1:Int, num2:Int) ->Int {
return num1 + num2
}
return function
}
Swift函数详解

本文详细介绍了Swift语言中的函数定义与使用,包括无参无返回值、有参带返回值、不定参数个数、参数类型默认值等多种函数形式。此外,还探讨了函数作为返回值的应用场景及函数类型的别名。
4598

被折叠的 条评论
为什么被折叠?



