函數

函數

  • 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)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 函數是用來完成特定任務的獨立的代碼塊。給一個函數起一個合適的名字,用來標識函數做什么,并且當函數需要執行的時候,這...
    窮人家的孩紙閱讀 816評論 2 1
  • 本章將會介紹 控制流For-In 循環While 循環If 條件語句Switch 語句控制轉移語句 continu...
    寒橋閱讀 745評論 0 0
  • [The Swift Programming Language 中文版]本頁包含內容: 函數是用來完成特定任務的獨...
    風林山火閱讀 529評論 0 0
  • 函數是執行特定任務的代碼自包含塊。給定一個函數名稱標識, 當執行其任務時就可以用這個標識來進行”調用”。 Swif...
    透支未來閱讀 252評論 0 1
  • 秋風流螢喚紅娘, 爾念郎君自思量; 湘綺淚落連珠子, 紫綺纖纖巧步移; 且念, 將軍飛騎, 女兒紅裝, 一朝酒醉,...
    Fiona_v閱讀 220評論 0 2