ミライスタート TECH系ブログ

株式会社ミライスタートのエンジニア達が気になったTECH系の記事等をアップしています!

【swift2.2】【備忘】関数についてあれこれ②

こんにちは。エンジニアの石井です。

前回に引き続き関数について。

◾️関数型の返却
関数自体を関数の返却値(型)とすることができる。

  func disp(){
    let f = calc("+") //fがfuncAdd関数となる
    print(f(1,2)) 
  }
  
  func calc(op:String) -> (Int,Int) -> Int{
    switch op {
    case "+":
      return funcAdd //funcAdd関数を返却
    default:
      return funcMinus //funcMinus関数を返却
    }
  }

  func funcAdd(val1:Int,val2:Int)->Int{
    return val1+val2
  }

  func funcMinus(val1:Int,val2:Int)->Int{
    return val1-val2
  }

◾️ネスト関数
ローカル関数みたいなものですね。

  func disp(){
    let f = calc("+")
    print(f(1,2)) //fという関数を引数に設定
  }
  
  func calc(op:String) -> (Int,Int) -> Int{
    func funcAdd(val1:Int,val2:Int)->Int{ //ローカル関数としてfuncAddを宣言
      return val1+val2
    }
    
    func funcMinus(val1:Int,val2:Int)->Int{ //ローカル関数としてfuncMinusを宣言
      return val1-val2
    }

    switch op {
    case "+":
      return funcAdd
    default:
      return funcMinus
    }
  }

参考:
developer.apple.com


蓋を開けてみるとswiftについては、
分からないことだらけな気がします。