1. 程式人生 > >SWIFT4.0學習01 - 函式的命名、呼叫以及注意事項

SWIFT4.0學習01 - 函式的命名、呼叫以及注意事項

swift語法中函式的使用大概分為以下幾種:

  1. swift中函式的命名格式
  2. 無返回值函式
  3. 有引數有返回值的函式
  4. 多個返回值的函式
  5. 如何定義外部引數名
  6. 如何忽略引數名
  7. 如何給引數設定預設值
  8. 如何定義可變引數
  9. 修改外部引數的值,Inout關鍵字的使用
  10. 函式的型別
  11. 函式型別作為引數
  12. 函式型別作為返回值

廢話不說,直接上程式碼:

 

  • swift中函式的命名格式

 

    •  func <#name#>(<#parameters#>) -> <#return type#> {
              <#function body#>
          }
      
      • <#name#>             :  函式名稱(可以使用中文命名)
      • <#parameters#>     :  引數 (引數名:引數型別 -> number:Int)
      • <#return type#>     :  函式返回值型別
      • <#function body#> : 函式體

 

  • 無返回值函式

 

    •  func 無返回值() {
              print("無返回值函式")
          }    

 

  • 有引數有返回值的函式

 

    •  override func viewDidLoad() {
              super.viewDidLoad()
              let sum = 有引數有返回值(numberOne: 1, numberTwo: 2)
              print(sum)
              
          }
          func 有引數有返回值(numberOne:Int, numberTwo:Int) -> Int {
              return numberOne + numberTwo
          }

 

  • 多個返回值的函式

 

    •  override func viewDidLoad() {
              super.viewDidLoad()
              let (sub, sum) = 有多組返回值(numberOne: 10, numberTwo: 2)
              print(sub,sum)
          }
          func 有多組返回值(numberOne:Int, numberTwo:Int) -> (sub:Int , sum:Int) {
             return ((numberOne-numberTwo),(numberOne+numberTwo))
          }

 

  • 如何定義外部引數名

 

    • 未定義外部引數   
      override func viewDidLoad() {
              super.viewDidLoad()
              let str = 未定義外部引數名(strOne: "雞", strTwo: "肋")
              print(str)
          }
          func 未定義外部引數名(strOne:String,strTwo:String) -> String {
              return strOne+strTwo
          }
      

       

 

    • 定義了外部引數 這樣調整即可: func 函式名:(引數名:引數型別)->返回值,調整為 func 函式名:(外部引數名 引數名:引數型別)->返回值
       override func viewDidLoad() {
       super.viewDidLoad()
       let str = 定義外部引數名(frist: "雞", second: "肋")
       print(str)
       }
       func 定義外部引數名(frist strOne:String, second strTwo:String) -> String {
       return strOne+strTwo
       }
      

       

  • 如何忽略引數名  
    • 定義了外部引數 這樣調整即可: func 函式名:(引數名:引數型別)->返回值,調整為 func 函式名:(_ 引數名:引數型別)->返回值
       override func viewDidLoad() {
              super.viewDidLoad()
              let str = 忽略引數名("雞", "肋")
              print(str)
          }
          func 忽略引數名(_ strOne:String,_ strTwo:String) -> String {
              return strOne+strTwo
          }
      

       

  • 如何給引數設定預設值
    • override func viewDidLoad() {
              super.viewDidLoad()
              let str = 給引數設定預設值(strOne: "!")
              print(str)
          }
          func 給引數設定預設值(strOne:String,strTwo:String = "雞", strThree:String = "肋") -> String {
              return strOne+strTwo+strThree
          }
      

       

    • 注意事項: 將帶有預設值的引數,放在引數列表的最後面!!!
  • 如何自定義引數的數量
    • 不確定輸入引數個數時,可以在引數型別後加上...來自定義引數數量
      override func viewDidLoad() {
              super.viewDidLoad()
              let a = 自定義引數的數量(argNumbers: 1,2,3)
              print(a)
              let b = 自定義引數的數量(argNumbers: 1,2,3,4)
              print(b)
          }
          func 自定義引數的數量(argNumbers:Int...) -> Int {
              var sum = 0
              for number in argNumbers {
                  sum += number
              }
              return sum
          }
      
    1. 注意事項: 一個函式最多隻能有一個引數數量被自定義,且放在引數列表的最後!!!

  • 通過函式方法,修改外部參入引數的值
    •   
        override func viewDidLoad() {
              super.viewDidLoad()
              var a = 1
              var b = 2
              修改參入的外部引數值(numOne: &a, numTwo: &b)
              print(a,b)        
          }
          func 修改參入的外部引數值(numOne: inout Int, numTwo: inout Int){
              let temp = numOne
              numOne = numTwo
              numTwo = temp
          }
      

       

    • 注意事項: 1>inout修飾的引數不能有預設值;2>呼叫函式時,傳入的引數必須是變數!!!

 

  • 函式的型別
    • 函式型別的格式: 函式的引數型別和返回值型別組成,例如下面的函式型別為: (String,String,String)->String
       func 給引數設定預設值(strOne:String,strTwo:String = "雞", strThree:String = "肋") -> String {
       return strOne+strTwo+strThree
       }
      

       

    • 賦值函式功能 例如: 下面函式最終列印結果:testtesttest
       override func viewDidLoad() {
              super.viewDidLoad()
              let 函式賦值的載體:(String , String, String)->String = 給引數設定預設值(strOne:strTwo:strThree:)
              let str = 函式賦值的載體("test", "test", "test")
              print(str)
          }
          func 給引數設定預設值(strOne:String,strTwo:String = "雞", strThree:String = "肋") -> String {
              return strOne+strTwo+strThree
          }
      

       

        
  • 函式型別做為引數
    • print(result)最終列印結果為3
        override func viewDidLoad() {
              super.viewDidLoad()
              //呼叫
              operationResult(funParam: 函式型別作為引數(numOne:numTwo:), numOne: 1, numTwo: 2)
          }
          //準備的函式型別
          func 函式型別作為引數(numOne:Int, numTwo:Int) -> Int {
              return numOne+numTwo
          }
          //operationResult 只關心函式型別是否與(Int, Int) -> Int一致; 不關心函式內部實現。
          func operationResult(funParam:(Int, Int) -> Int, numOne:Int, numTwo:Int){
              let result = funParam(numOne, numTwo)
              print(result)
          }
      

       

  • 函式型別作為返回值
    •   
      override func viewDidLoad() {
              super.viewDidLoad()
              var currentValue = 5
              //sub為函式:加一或者減一
              let sub = 加一還是減一(currentValue > 0)
              while currentValue != 0 {
                  currentValue = sub(currentValue)
                  print(currentValue)
              }
          }
          //滿足加一還是減一函式的返回值型別((Int)->Int)的函式
          func 加一(_ input: Int) -> Int {
              return input+1
          }
          //滿足加一還是減一函式的返回值型別((Int)->Int)的函式
          func 減一(_ input: Int) -> Int {
              return input-1
          }
          //(_ condition:Bool)->引數名:引數型別; (Int)->Int->返回值是一個此型別的函式
          func 加一還是減一(_ condition:Bool) -> (Int)->Int {
              return  condition ? 減一:加一
          }