Swiftで関数の配列をつくる
Cでも関数のポインターの配列というのをつくれるが、Swiftでどう書くか試してみる。
もっとも単純なもの:
func func1() { println("Hello 1") } func func2() { println("Hello 2") } let fa:[()->Void] = [func1, func2] fa[0]() fa[1]()
これはうまく行った。
結果は:
Hello 1
Hello 2
しかし、関数の宣言の場所を変えて、配列の宣言の後にすると、エラーが起きる。
コード:
let fa:[()->Void] = [func1, func2] func func1() { println("Hello 1") } func func2() { println("Hello 2") } fa[0]() fa[1]()
コンパイルエラー:
let fa:[()->Void] = [func1, func2]
^
let fa:[()->Void] = [func1, func2]
^
配列から関数を参照する場合は、定義を先に記述する必要があるってか。
これでは使えない。制約が強い・・・。
ググってみると、クラスのgetterとして定義するやり方を見つけた。
コード:
class AA { var fa:[()->Void] { return [func1, func2] } func func1() { println("Hello 1") } func func2() { println("Hello 2") } func run() { fa[0]() fa[1]() } } let a = AA() a.run()