函數
- 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)