2855


ruby での次のようなコードと同等のことを swift でおこなうにはどのように記述すればよいでしょうか？

[code]

    my_func_add = proc do |a, b|
      a + b
    end
    
    my_func_sub = proc do |a, b|
      a - b
    end
    
    funcs = {
      '+' => my_func_add,
      '-' => my_func_sub
    }.freeze
    
    p funcs['+'].call(10, 1)  # => 11
    p funcs['-'].call(10, 1)  # => 9
    
[/code]


CC BY-SA 3.0
2014-12-31T12:16:07.063
2854
2015-01-01T03:24:43.453
2987
question
ruby swift
ruby での Proc の Hash に相当することを swift で書きたい。

[code]

    func myFuncAdd(a: Int, b: Int) -> Int {
        return a + b
    }
    
    func myFuncSub(a: Int, b: Int) -> Int {
        return a - b
    }
    
    let funcs: [String: (Int, Int) -> Int] = [
      "+": myFuncAdd,
      "-": myFuncSub
    ]
    
    println(funcs["+"]!(10, 1))
    println(funcs["-"]!(10, 1))
    
[/code]

`funcs`がimmutableであることも再現しています。

追記: 削除された重複回答を見て気づいたのですが、Swiftはキャメルケース推奨のようなのでそちらに合わせます。

`ViewController` 内に書く場合のサンプル:

[code]

    class ViewController: UIViewController {
      class func myFuncAdd(a: Int, b: Int) -> Int {
        return a + b
      }
    
      class func myFuncSub(a: Int, b: Int) -> Int {
        return a - b
      }
    
      let funcs: [String: (Int, Int) -> Int] = [
        "+": ViewController.myFuncAdd,
        "-": ViewController.myFuncSub
      ]
    
      override func viewDidLoad() {
        super.viewDidLoad()
        println(funcs["+"]!(10, 1))
        println(funcs["-"]!(10, 1))
      }
    }
    
[/code]


CC BY-SA 3.0
2014-12-31T13:42:42.257
2855
2015-01-01T03:24:43.453
2015-01-01T03:24:43.453
3639
3639
2854
answer