函数
2016-09-01 本文已影响0人
彼岸的黑色曼陀罗
函数
- swift里的函数就是OC里的方法
- 格式:
- func:关键字,多个参数之间用,分隔,也可以没有参数
- (->)指向返回值类型
func 函数名(参数类别) ->返回值类型{
代码块
return 返回值
}
- 函数的基本使用
- 没有参数没有返回值
func about ()->Void{
print("iphone7")
}
//调用函数
about()
//简便写法
func about(){
print("iphone7")
}
- 有参数没有返回值的函数
func callPhone(phoneNum: String){
print("打电话给\(phoneNum)")
print("打电话给:"+phoneNum)
}
callPhone("+ 86 110")
- 没有参数有返回值的函数
func newMessage() ->String{
return "吃饭了吗"
}
newMessage()
- 有参数有返回值的函数
func addNums(num1 :Int,num2 :Int)->Int{
return num1 +num2
}
let result = addNums(20,num2:30)
函数的使用注意(了解)
- 1.内部参数和外部参数
- 内部参数(内部参数名称)
- 在函数内部可以看到的标识符就是内部参数名称(num1,num2就是内部参数)
- 默认情况下,所有的参数都是内部参数
- 外部参数
- 在函数外部可以看到的标识符就是外部参数(num1看不见,num2以后的都能看见)
- 从第二个参数开始都是外部参数,但是第一个参数默认不是外部参数
- 如果希望第一个参数也是外部参数,那么可以在第一个参数的标识符前,加上第一个参数的外部参数名称
- 如果希望后面的参数不是外部参数,可以在标识符前加_
- 如果想要修改外部参数名称,就在外部参数标识符前写上新的名字
- 内部参数(内部参数名称)
func sum(num1 :Int ,num2: Int)->Int{
return num1 + num2
}
sum(20,num2 :30)
//把num1变为外部参数
func sum(num1 num1 :Int ,num2: Int)->Int{
return num1 + num2
}
sum(num1 :20,num2 :30)
//都不是外部参数
func sum(num1 :Int , _ num2: Int)->Int{
return num1 + num2
}
sum(20,30)
- 2.默认参数
- 参数后面写一个等号
- 等于后面写一个默认的值
func makeCoffee (coffeeName:String = "雀巢")->String{
return "制作了一杯爱心\(coffeeName)咖啡"
}
let coffee1 = makeCoffee("拿铁")
makeCoffee("摩卡")
makeCoffee()
- 3.可变参数
- nums: Int...
- nums是一个数组类型
- 把所有的数组放到数组里了
- 遍历数组就可以得到想要的结果
func sum(num1 :Int ,num2 :Int)->Int {
return num1 +num2
}
sum(20,num2:30)
//把四个、十个数字相加
//可变参数
func sum (nums :Int...)->Int{
var total = 0
for num in nums{
total += num
}
}
sum(20,30,40,50)
//print()也是可变函数,参数是可变的
print()
- 4.指针(引用类型)
- 怎么通过一个函数交换m/n的值
- 关键字:inout
var m = 20
var n = 30
-->报错:常量是不能修改的
func changeNum(num1:Int , num2 :Int){
let temp = num1
num1 = num2
num2 = temp
}
-->报警告,值传递,本质上不会交换m/n
func changeNum( var num1:Int , num2 :Int){
let temp = num1
num1 = num2
num2 = temp
}
changeNum(m,num2:n)
-->指针传递:
func changeNum(inout num1 :Int ,inout num2 :Int){
let temp = num1 | num1是地址,在等号右边,相当于取值
num1 = num2 |赋值到num1的地址里,把num1里的值改num2
num2 = temp |把temp的值赋值到num2的地址里
}
change(&m,num2 :&n)
- 5.函数嵌套使用
- 可以在方法里面写方法
- 建议不要这样写,代码阅读性差
func demo(){
func test(){
func test1(){
print("test1")
}
print("test")
}
print("demo")
test() | 先打印demo再打印test
}
demo
函数的类型
-
函数的类型是由函数的参数类型和返回值类型共同组成的
- 类型(Int ,Int)->Int
- 把函数作为方法的参数,把函数作为方法的返回值
- 函数式编程
- 编程语言:Lisp
- 比C语言C++出现的都早
- 天才程序员使用的语言
- 现代所有语言的高度仅仅达到了这门语言1960+的高度(比如OC的block)
- 数学
- Java 3000行 == Lisp 100行
- 《黑客与画家》
- 用于人工智能领域
func sum(num1 :Int ,num2 :Int)->Int{
return num1 +num2
}
func multiply(num1 :Int ,num2:Int)->Int{
return num1 * num2
}
var abc :(Int ,Int)->Int = sum
abc = multiply
abc(20,30)
//函数作为方法的参数,把函数以参数的形式传到另外一个地方
func printResult(cba :(Int ,Int)->Int){
print(cba(20,30))
}
printResult(sum)